以下哪项是检查字符大小写的最快方法

  • 本文关键字:大小写 方法 字符 python
  • 更新时间 :
  • 英文 :


我正在从头开始学习Python。同样,我正在使用《如何像计算机科学家一样思考》一书。同一的第 7.12 节涉及字符分类,它列出了 3 种不同的方法来确定是否给定字符 (ch) 为小写,如下所示:

1.

    def is_lower(ch):    
        return string.find(string.lowercase, ch) != -1

阿拉伯数字。

     def is_lower(ch):
         return ch in string.lowercase

3.

     def is_lower(ch):
         return 'a' <= ch <= 'z'

我在想其中哪一个是最快的处理速度。我只关心处理时间,而不关心内存要求。我猜这是第三种,因为在前两种情况下,可能需要处理整个字符串直到最后才能找出该字符是否存在,而在第三种情况下,只需两次比较就足够了,整个字符串不需要处理。那么我的猜测是对的吗?

以下是

我使用timeit的测试代码:

import string
import timeit
import random
def is_lower(ch):
    return string.find(string.lowercase, ch) != -1
def is_lower1(ch):
    return ch in string.lowercase
def is_lower2(ch):
    return 'a' <= ch <= 'z'
def wrapper(func, *args, **kwargs):
    def wrapped():
        return func(*args, **kwargs)
    return wrapped
for i in range(100):
    lt = random.choice(string.letters)
    wrappered1 = wrapper(is_lower, lt)
    wrappered2 = wrapper(is_lower1, lt)
    wrappered3 = wrapper(is_lower2, lt)
    t1, t2, t3 = [], [], []
    t1 += timeit.repeat(wrappered1, repeat=3, number=100000)
    t2 += timeit.repeat(wrappered2, repeat=3, number=100000)
    t3 += timeit.repeat(wrappered3, repeat=3, number=100000)
print 't1: ', sum(t1)/len(t1)
print 't2: ', sum(t2)/len(t2)
print 't2: ', sum(t3)/len(t3)

输出:

Out[44]:
t1:  0.0781290027991
t2:  0.0348194339546
t2:  0.0307262024573

可以清楚地看到,最后一种方法是最快的,而第一种方法是最慢的。

最新更新