1

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


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

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

2 回答 2

3
  • 你不需要打len两次电话,
  • 你可以利用abs

例子:

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中,确实更快。

于 2013-10-09T16:36:45.803 回答
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
于 2013-10-09T16:41:17.640 回答