2015-07-20 55 views
1

我想aA是相同的單詞。這是我的方法如下:有更好的方法來檢查單詞嗎?

chars = 'aA' 

def test_no_lower(): 
    for c in chars: 
     if c in 'aA': 
      pass 

def test_lower(): 
    for c in chars: 
     if c.lower() == 'a': 
      pass 

if __name__ == '__main__': 

    from timeit import timeit 

    print timeit(test_no_lower) 
    # -> 0.320052002777 

    print timeit(test_lower) 
    # -> 0.470894553251 

我發現test_no_lowertest_lower更快。我猜想原因test_lower調用lower函數,所以它更多的一步轉換字符串比test_no_lower

有沒有更好的方法可以比test_no_lower更快?

回答

3

一般而言,if 'a' in c.lower()是最好的方法。在Python3中,你會使用if 'a' in c.casefold()

如果你確定你一次只測試一個角色,我不明白你爲什麼不能使用if c in 'aA',但它看起來像一個狹窄的用例。想象一下,如果你需要確保一個字中的所有字母在ay之間(你的僱主討厭字母「Z」)。

charset = 'abcdefghijklmnopqrstuvwxyABCDEFGHIJKLMNOPQRSTUVWXY' 
all(c in charset for c in word) 

相比:

word.lower() == word 
+0

你的答案是真棒。 – Tony

相關問題