反转追加列表和前置列表哪个更便宜? - python

12 投票
1 回答
3001 浏览
提问于 2025-04-18 16:41

哪种方法更快、更符合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] 比其他任何方法都要好。

你还需要问问自己,是想在新列表中“引用”元素,还是“复制”元素。

撰写回答