为什么lst.reverse()
比lst[::-1]
快得多? Python 3和2中似乎存在很大的时间差异。
示例(Python 3.5)
>>> from timeit import timeit
>>> lst = list('Crooked Hillary!') * 1000
>>> def TrumpWins(lst):
... lst.reverse()
... return lst
...
>>> def SecondPlace(lst):
... return lst[::-1]
...
>>> timeit(lambda: TrumpWins(lst), number=100000)
0.7976173080969602
>>> timeit(lambda: SecondPlace(lst), number=100000)
4.703373569995165
答案 0 :(得分:14)
开玩笑。
lst[::-1]
会返回一个新列表,而list.reverse
只会执行列表 inplace 的撤消。额外的开销来自创建新列表。并且成本/开销将与您尝试撤销的列表的长度成比例增长。
更公平的比较可能是在调用reverse
方法之前复制列表:
In [14]: l = [1]*1000
In [15]: %%timeit
....: l[::-1]
....:
100000 loops, best of 3: 5.64 µs per loop
In [16]: %%timeit
....: l[:].reverse()
....:
100000 loops, best of 3: 6.27 µs per loop
几乎相同的时间,由于方法调用的额外开销,reverse
在这种情况下失败,与使用语言构造的第一种情况相反。