如何在python列表中循环(倒计时)

时间:2011-07-08 04:52:46

标签: python loops

如何在python列表中循环下来?

例如

循环:

L = [1,2,3]
for item in L
    print item #-->1,2,3

循环播放:

L = [1,2,3]
for ???
    print item #-->3,2,1

谢谢

4 个答案:

答案 0 :(得分:16)

Batteries included.

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