比较两个长度的一串的最快方法

时间:2013-10-09 16:32:20

标签: python performance python-2.7 comparison string-comparison

我正在寻找比较字符串是否有两种长度之一的最快方法。这个字符串必须是一个字母更长或更短,我觉得下面的if语句可能不是最快的,我觉得它没有太大的改进,或没有它。


我在两个字符串之间进行比较,如果my_word长度超过1个字符或者超过compare_word那么我将继续我的循环。

if (len(compare_word) > (len(my_word)+1)) and (len(compare_word) < (len(my_word)-1)): 
    continue

2 个答案:

答案 0 :(得分:3)

  • 您无需再拨打len两次,
  • 您可以使用abs

示例:

s = "Hello"
t = "Worl"

if abs(len(s) - len(t)) > 1:
    print("string lengths differ by more than 1")

更新:使用ipython的timeit几乎没有速度增加,但是:

In [10]: s = str(range(100000))

In [11]: t = str(range(100001))

In [12]: %timeit len(s) > len(t) + 1 and len(s) < len(t) - 1
10000000 loops, best of 3: 106 ns per loop

In [13]: %timeit abs(len(s) - len(t)) > 1
10000000 loops, best of 3: 115 ns per loop

In [14]: %timeit 1 >= len(s) - len(t) >= -1
10000000 loops, best of 3: 113 ns per loop

这是另一个使用较短字符串的运行,但结果大致相同:https://gist.github.com/miku/6904419

尽管如此,在context的OP代码中,abs(len(s) - len(t)) > 1确实更快。

答案 1 :(得分:1)

似乎最快的方法是

if 1 >= len(s) - len(t) >= -1:
    print("string lengths differ by more than 1")

事实上:

>>> %timeit abs(a) <= 1
1000000 loops, best of 3: 283 ns per loop
>>> %timeit  1 >= a >= -1
10000000 loops, best of 3: 198 ns per loop