我正在使用Python 3.2.3。在列表中以相反的方式迭代,最快的方法是什么? [::-1]、reversed、list.reverse()或其他方法?我正在处理大约5e6个元素的列表,所以我真的需要避免复制列表。
我正在使用Python 3.2.3。在列表中以相反的方式迭代,最快的方法是什么? [::-1]、reversed、list.reverse()或其他方法?我正在处理大约5e6个元素的列表,所以我真的需要避免复制列表。
>>> from timeit import Timer
>>> t = Timer('[x for x in l[::-1]]', 'l = list(range(100000))')
>>> t.timeit(number=1000)
5.549649953842163
>>> t = Timer('l.reverse(); [x for x in l]', 'l = list(range(100000))')
>>> t.timeit(number=1000)
4.548457145690918
>>> t = Timer('[x for x in reversed(l)]', 'l = list(range(100000))')
>>> t.timeit(number=1000)
4.428632974624634
l.reversed()
与通过迭代原始列表排序几乎相当:(t = Timer('[x for x in l]', 'l = list(range(100000))')
),这是在Python 3.8中的情况。9年内会发生很多事情,我想。 - Lorem Ipsumreversed
应该是最好的选择,因为它返回一个迭代器,所以不会复制列表,只会一次生成一个元素。(list.reverse()
同样不会复制列表,但它会改变列表,所以在操作后列表会倒序排列,而 reversed
不会修改原始列表。)
timeit
模块。 - Joel Cornett