我正在寻找比较字符串是否有两种长度之一的最快方法。这个字符串必须是一个字母更长或更短,我觉得下面的if语句可能不是最快的,我觉得它没有太大的改进,或没有它。
我在两个字符串之间进行比较,如果my_word
长度超过1个字符或者超过compare_word
那么我将继续我的循环。
if (len(compare_word) > (len(my_word)+1)) and (len(compare_word) < (len(my_word)-1)):
continue
答案 0 :(得分:3)
示例:
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