为什么是“第一次反向()”比“lst[::1]快多了?

2024-10-01 13:24:22 发布

您现在位置:Python中文网/ 问答频道 /正文

为什么lst.reverse()lst[::-1]快那么多?Python3和Python3和Python2似乎都有很大的时间差。在

示例(Python3.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

Tags: lambdafromimport示例numberreturndefpython3
1条回答
网友
1楼 · 发布于 2024-10-01 13:24:22

别开玩笑了。在

lst[::-1]返回一个新的列表,而list.reverse只是在原地执行列表的反转。额外的开销来自创建一个新列表。而且,成本/管理费用将与您试图逆转的列表长度成比例增长。在

更公平的比较可能是在调用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在本例中丢失,这与使用语言构造的第一种情况不同。在

相关问题 更多 >