如何在Python中反向迭代列表?
请参见:如何获得列表的反向副本(避免在.reverse后链接方法时使用单独的语句)?
如何在Python中反向迭代列表?
请参见:如何获得列表的反向副本(避免在.reverse后链接方法时使用单独的语句)?
当前回答
我发现(与其他一些建议相反)l.reverse()是迄今为止在Python 3和2中反转长列表的最快方法。我很想知道其他人是否可以复制这些时间。
L[::-1]可能更慢,因为它在反转列表之前复制了列表。在reversed(l)所做的迭代器周围添加list()调用必须增加一些开销。当然,如果你想要一个列表或迭代器的副本,那么就使用它们各自的方法,但如果你只想反转列表,那么l.reverse()似乎是最快的方法。
功能
def rev_list1(l):
return l[::-1]
def rev_list2(l):
return list(reversed(l))
def rev_list3(l):
l.reverse()
return l
List
l = list(range(1000000))
Python 3.5计时
timeit(lambda: rev_list1(l), number=1000)
# 6.48
timeit(lambda: rev_list2(l), number=1000)
# 7.13
timeit(lambda: rev_list3(l), number=1000)
# 0.44
Python 2.7计时
timeit(lambda: rev_list1(l), number=1000)
# 6.76
timeit(lambda: rev_list2(l), number=1000)
# 9.18
timeit(lambda: rev_list3(l), number=1000)
# 0.46
其他回答
>>> l = [1, 2, 3, 4, 5]
>>> print(reduce(lambda acc, x: [x] + acc, l, []))
[5, 4, 3, 2, 1]
组织价值观:
在Python中,列表的顺序也可以通过sort操作,以数字/字母顺序组织变量: 暂时:
print(排序(my_list))
永久的:
my_list.sort(), print(my_list)
你可以用"reverse=True"来排序:
print(sorted(my_list, reverse=True))
or
my_list.sort(reverse=True), print(my_list)
没有组织
也许您不想对值进行排序,而只是将值反向排列。然后我们可以这样做:
print(list(reversed(my_list)))
**数字在列表顺序上优先于字母。Python价值观的组织非常棒。
编辑1:一个错误的版主声称我的答案是一个副本,并删除了我的旧帖子。
使用列表。Reverse将列表就地反转:
>>> xs = [0, 10, 20, 40]
>>> xs.reverse()
>>> xs
[40, 20, 10, 0]
使用切片以相反的顺序创建一个新列表:
>>> xs[::-1]
[40, 20, 10, 0]
你也可以使用数组索引的逐位补码反向遍历数组:
>>> array = [0, 10, 20, 40]
>>> [array[~i] for i, _ in enumerate(array)]
[40, 20, 10, 0]
不管你做什么,不要这样做;)
我发现(与其他一些建议相反)l.reverse()是迄今为止在Python 3和2中反转长列表的最快方法。我很想知道其他人是否可以复制这些时间。
L[::-1]可能更慢,因为它在反转列表之前复制了列表。在reversed(l)所做的迭代器周围添加list()调用必须增加一些开销。当然,如果你想要一个列表或迭代器的副本,那么就使用它们各自的方法,但如果你只想反转列表,那么l.reverse()似乎是最快的方法。
功能
def rev_list1(l):
return l[::-1]
def rev_list2(l):
return list(reversed(l))
def rev_list3(l):
l.reverse()
return l
List
l = list(range(1000000))
Python 3.5计时
timeit(lambda: rev_list1(l), number=1000)
# 6.48
timeit(lambda: rev_list2(l), number=1000)
# 7.13
timeit(lambda: rev_list3(l), number=1000)
# 0.44
Python 2.7计时
timeit(lambda: rev_list1(l), number=1000)
# 6.76
timeit(lambda: rev_list2(l), number=1000)
# 9.18
timeit(lambda: rev_list3(l), number=1000)
# 0.46