有更好的检查方法吗?

时间:2015-07-20 01:58:59

标签: python python-2.7

我认为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更快?

1 个答案:

答案 0 :(得分: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