猿问

在Python中创建“反向”列表的最佳方法?

在Python中,创建一个与其他列表的项目相同但顺序相反的新列表的最佳方法是什么?(我不想就地修改现有列表。)


这是我想到的一种解决方案:


new_list = list(reversed(old_list))

也可以复制old_list然后在原处反向复制:


new_list = list(old_list) # or `new_list = old_list[:]`

new_list.reverse()

有没有我忽略的更好的选择?如果不是,是否有令人信服的理由(例如效率)来使用上述方法中的一种?


炎炎设计
浏览 670回答 3
3回答

慕田峪7331174

调整项值得为sdolan的时间计算提供基准基准/调整,以显示“反转”的性能,而无需经常进行不必要的list()转换。此list()操作为运行时增加了26个usecs,仅在迭代器不可接受的情况下才需要此操作。结果:reversed(lst) -- 11.2 usecslist(reversed(lst)) -- 37.1 usecslst[::-1] -- 23.6 usecs计算:# I ran this set of 100000 and came up with 11.2, twice:python -m timeit "ol = [1, 2, 3]*1000; nl = reversed(ol)"100000 loops, best of 3: 11.2 usec per loop# This shows the overhead of list()python -m timeit "ol = [1, 2, 3]*1000; nl = list(reversed(ol))"10000 loops, best of 3: 37.1 usec per loop# This is the result for reverse via -1 step slicespython -m timeit "ol = [1, 2, 3]*1000;nl = ol[::-1]"10000 loops, best of 3: 23.6 usec per loop结论:这些测试的结论reversed()比[::-1]12.4 usecs 的切片速度更快
随时随地看视频慕课网APP
我要回答