如何在python列表中循环下来?
例如
循环:
L = [1,2,3]
for item in L
print item #-->1,2,3
循环播放:
L = [1,2,3]
for ???
print item #-->3,2,1
谢谢
答案 0 :(得分:16)
for i in reversed([1, 2, 3]):
print i
切片列表(ls[::-1]
)非常适合制作反向副本,但在我的机器上,迭代速度较慢,即使列表已在内存中也是如此:
>>> def sliceit(x):
... l = range(x)
... for i in l[::-1]:
... i
...
>>> def reverseit(x):
... l = range(x)
... for i in reversed(l):
... i
...
>>> %timeit sliceit(100)
100000 loops, best of 3: 4.04 µs per loop
>>> %timeit reverseit(100)
100000 loops, best of 3: 3.79 µs per loop
>>> %timeit sliceit(1000)
10000 loops, best of 3: 34.9 µs per loop
>>> %timeit reverseit(1000)
10000 loops, best of 3: 32.5 µs per loop
>>> %timeit sliceit(10000)
1000 loops, best of 3: 364 µs per loop
>>> %timeit reverseit(10000)
1000 loops, best of 3: 331 µs per loop
在这种情况下通常都是如此,差异可以忽略不计。对于不同版本的Python,可能会有所不同(我在上面的测试中使用了Python 2.7)。使用reversed
的真正好处是可读性 - 在大多数情况下,即使花费额外的几微秒也会更好。
答案 1 :(得分:7)
颠倒序列。
L = [1,2,3]
for item in reversed(L)
print item #-->3,2,1
答案 2 :(得分:6)
另一种解决方案:
for item in L[::-1]:
print item
答案 3 :(得分:3)
我知道这个帖子现在已有多年历史了,但根据接受的答案发表的评论包含使用[::-1]
比使用reversed()
更快的说法。仅当您的列表被明确放入内存时才会出现这种情况,这在执行倒计时时不是必需的。否则它会慢一点:
>>> timeit.Timer(stmt="range(1,1000)[::-1]").timeit()
10.801303316066111
>>> timeit.Timer(stmt="list(reversed(xrange(1,1000)))").timeit()
9.484562358901144
... 和 [::-1]
占用的空间超过reversed
。