【问题标题】:how to loop down in python list (countdown)如何在python列表中向下循环(倒计时)
【发布时间】:2011-07-08 04:52:46
【问题描述】:

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

例如

循环:

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

循环往下:

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

谢谢

【问题讨论】:

    标签: python loops


    【解决方案1】:

    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 的真正好处是可读性——在大多数情况下它会更可取,即使它需要额外花费几微秒。

    【讨论】:

      【解决方案2】:

      颠倒顺序。

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

      【讨论】:

        【解决方案3】:

        另一种解决方案:

        for item in L[::-1]:
            print item
        

        【讨论】:

        • 请注意,这将暂时创建序列的反向副本,而 reversed() 只会在需要时进行复制。
        • +3 用于创建副本?对不起,但这值得 -3
        • L[::-1]: 跑得比reversed(L)
        • 在我的电脑上,reversed(L)L[::-1] 快。
        【解决方案4】:

        我知道这个帖子已经有好几年了,但是在接受的答案下的评论包含使用[::-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 多。

        【讨论】:

        • 在我的电脑上reversed 更快,即使对于已经在内存中的列表也是如此。 (请参阅我编辑的答案的时间安排。)
        猜你喜欢
        • 1970-01-01
        • 2016-11-06
        • 2014-03-02
        • 2021-12-09
        • 2013-06-01
        • 2015-05-31
        • 2018-10-31
        • 1970-01-01
        相关资源
        最近更新 更多