【问题标题】:How can one reverse the order of a list in Python without using a loop?如何在不使用循环的情况下反转 Python 中列表的顺序?
【发布时间】:2013-07-19 06:12:53
【问题描述】:

如何在不使用循环的情况下在 Python 中反转列表的顺序?解空间没有其他限制。

【问题讨论】:

  • l.reverse()。这是“Python 反向列表”的第一个 Google 结果就在文档中

标签: python list list-comprehension


【解决方案1】:
a = ['a','b','c']

你可以试试

b = a[::-1]

它会在不使用循环的情况下反转列表。

您可以在任何序列/容器/可迭代对象上使用相同的技巧来反转项目。

【讨论】:

  • @user1800340 这是 Python 的 Slice Notation :)
  • 我想我明白了。 'list[::x]' 表示方向的步长(x 的符号)和幅度 x。因此 -1 意味着后退一步,每一步的大小为 1。
  • @user1800340 正如 Haidro 所说,它是列表的切片符号。你可以参考official docs for list。它会解释一切。
  • 切片表示法中有三个参数,start,stop和step,如果你不提供默认start将为0,stop将为-1表示包含列表中的所有内容,因此step为-1从最后一个元素开始反向迭代。
  • @user1800340 更多解释请参见this link
【解决方案2】:

list.reverse()

底层实现是否使用我不知道的循环。

Datastructures - Python Documentation

【讨论】:

    【解决方案3】:

    由于 Python 处理列表的方式,此反向函数效率低下。但是,它值得理解,因为它展示了如何使用递归函数以一种几乎可以适应任何语言的方式替换循环。 (换句话说,它不依赖于 Python 的内置功能。)请注意,l[:1] 返回一个包含l 的第一项的单项列表,l[1:] 返回@987654324 中的所有剩余项@。

    >>> def reverse(l):
    ...     return reverse(l[1:]) + l[:1] if l else l
    ... 
    >>> reverse([1, 2, 3, 4, 5])
    [5, 4, 3, 2, 1]
    

    【讨论】:

      【解决方案4】:

      也可以使用内置函数reversed

      a = list(reversed(your_list))
      

      【讨论】:

      • @septi 实际上,reversed 返回的是一个迭代器,所以你需要使用lista 中存储一个列表,而不是一个迭代器。
      【解决方案5】:

      假设您想要就地更改:

      >>> a = [1,2,3]
      >>> a.reverse()
      >>> a
      [3, 2, 1]
      >>> a[:] = a[::-1]
      >>> a
      [1, 2, 3]
      

      【讨论】:

        【解决方案6】:

        有很多方法:

        你可以使用扩展List Slicing:

        >>> print [1, 2, 3, 4, 5][::-1]
        [5, 4, 3, 2, 1]
        

        或者使用内置的.reverse()函数:

        >>> L = [1, 2, 3, 4, 5]
        >>> L.reverse()
        >>> print L
        [5, 4, 3, 2, 1]
        

        或者使用reversed(),它返回反向列表——但作为一个迭代器:

        >>> L = [1, 2, 3, 4, 5]
        >>> print reversed(L)
        <listreverseiterator object at 0x2c3630>
        >>> print list(reversed(L))
        [5, 4, 3, 2, 1]
        

        时间比较:

        $ python -m timeit "L = range(1000)" "L = L[::-1]"
        100000 loops, best of 3: 11.8 usec per loop
        
        $ python -m timeit "L = range(1000)" "L.reverse()"
        100000 loops, best of 3: 9.13 usec per loop
        
        $ python -m timeit "L = range(1000)" "L = list(reversed(L))"
        100000 loops, best of 3: 19.1 usec per loop
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-05-12
          • 2017-09-05
          • 2018-03-18
          • 2023-02-26
          • 2015-04-24
          • 2018-05-31
          • 2020-04-13
          相关资源
          最近更新 更多