反转追加列表和前置列表哪个更便宜? - python
哪种方法更快、更符合Python风格?
- 反转一个追加的列表
- 从头开始往列表前面添加
- 使用
deque
(双端队列)
举个例子,这里有一些虚构的数据要存入一个新列表中
# Let's say my function outputs these output individually.
x = [12,34,44,346,345,876,123]
反转一个追加的列表:
new_list = []
for i in x:
new_list.append(i)
new_list = newlist[::-1]
往列表前面添加:
new_list = []
for i in x:
new_list.insert(0,i)
使用 deque:
from collections import deque
for i in x:
x.appendleft(i)
请注意,我的问题不是关于如何反转列表。同时假设这个列表的大小大约是20,000。
1 个回答
4
你的第一个方法可以简化成一行:
new_list = x[::-1]
然后,要检查哪个方法比其他方法快,只需使用 timeit
(在 python 2.7.8 中测试过):
C:\>python -m timeit -s "x = [12,34,44,346,345,876,123]" "new_list = x[::-1]"
1000000 loops, best of 3: 0.215 usec per loop
C:\>python -m timeit -s "x = [12,34,44,346,345,876,123]; new_list = []" "for i in x:" " new_list.insert(0,i)"
10000 loops, best of 3: 146 usec per loop
C:\>python -m timeit -s "from collections import deque; x = [12,34,44,346,345,876,123]; new_list = deque()" "for i in x:" " new_list.appendleft(i)"
1000000 loops, best of 3: 0.713 usec per loop
C:\>python -m timeit -s "x = [12,34,44,346,345,876,123]" "new_list = list(reversed(x))"
1000000 loops, best of 3: 0.837 usec per loop
所以 new_list = x[::-1]
比其他任何方法都要好。
你还需要问问自己,是想在新列表中“引用”元素,还是“复制”元素。