现在让我们来使用timeit
。 提示: Alex的[::-1]
是最快的 :)。
$ p -m timeit "ol = [1, 2, 3]; nl = list(reversed(ol))"
100000 loops, best of 3: 2.34 usec per loop
$ p -m timeit "ol = [1, 2, 3]; nl = list(ol); nl.reverse();"
1000000 loops, best of 3: 0.686 usec per loop
$ p -m timeit "ol = [1, 2, 3]; nl = ol[::-1];"
1000000 loops, best of 3: 0.569 usec per loop
$ p -m timeit "ol = [1, 2, 3]; nl = [i for i in reversed(ol)];"
1000000 loops, best of 3: 1.48 usec per loop
$ p -m timeit "ol = [1, 2, 3]*1000; nl = list(reversed(ol))"
10000 loops, best of 3: 44.7 usec per loop
$ p -m timeit "ol = [1, 2, 3]*1000; nl = list(ol); nl.reverse();"
10000 loops, best of 3: 27.2 usec per loop
$ p -m timeit "ol = [1, 2, 3]*1000; nl = ol[::-1];"
10000 loops, best of 3: 24.3 usec per loop
$ p -m timeit "ol = [1, 2, 3]*1000; nl = [i for i in reversed(ol)];"
10000 loops, best of 3: 155 usec per loop
更新:添加了由inspectorG4dget建议的列表推导式方法。我会让结果说明一切。
[::-1]
比list(reversed(oldlist))
看起来更神奇也更难读懂,除了微小的性能优化外,有没有其他理由更喜欢[::-1]
而不是reversed()
? - Brian Campbellreversed
具有巨大的优势,因为它不会浪费内存或在前期构建列表时浪费时间。但是,在您需要列表时,使用[::-1]
而不是list(reversed())
类似于使用[listcomp]
而不是list(genexpr)
。 - abarnert[::-1]
的意思是删除列表的最后一个元素,而不是将其翻转。reversed(list)
明确说明了它正在做什么;它以 "显式优于隐式"、"可读性至上" 和 "简洁胜于繁琐" 的意义来阐述其意图。 - Brian Campbell