我认为a
和A
是相同的词。这些是我的方法如下:
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_lower
比test_lower
快。我想test_lower
调用lower
函数的原因,所以它转换字符串的步骤比test_no_lower
更多。
有没有更好的方法比test_no_lower
更快?
答案 0 :(得分:3)
一般来说,if 'a' in c.lower()
是解决此问题的最佳方式。在Python3中,您使用if 'a' in c.casefold()
。
如果你确定自己一次只测试一个角色,我就不明白为什么你不能使用if c in 'aA'
,但似乎就像一个狭窄的用例。想象一下,如果你需要确保一个单词中的所有字母都在a
和y
之间(你的雇主讨厌这封信" Z")。
charset = 'abcdefghijklmnopqrstuvwxyABCDEFGHIJKLMNOPQRSTUVWXY'
all(c in charset for c in word)
与之相比:
word.lower() == word