我正在寻找比较字符串是否具有两种长度之一的最快方法。这个字符串必须长一个字母或短一个字母,我觉得下面的 if 语句可能不是最快的,我看不出有多少时间改进,或者没有它。
我在两个字符串之间进行比较,如果my_word
长度小于或大于 1 个字符,compare_word
那么我将继续我的循环。
if (len(compare_word) > (len(my_word)+1)) and (len(compare_word) < (len(my_word)-1)):
continue
我正在寻找比较字符串是否具有两种长度之一的最快方法。这个字符串必须长一个字母或短一个字母,我觉得下面的 if 语句可能不是最快的,我看不出有多少时间改进,或者没有它。
我在两个字符串之间进行比较,如果my_word
长度小于或大于 1 个字符,compare_word
那么我将继续我的循环。
if (len(compare_word) > (len(my_word)+1)) and (len(compare_word) < (len(my_word)-1)):
continue
例子:
s = "Hello"
t = "Worl"
if abs(len(s) - len(t)) > 1:
print("string lengths differ by more than 1")
更新:使用 ipythontimeit
几乎没有速度增益,但是:
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 。
然而,在OPs 代码的上下文abs(len(s) - len(t)) > 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