【发布时间】:2013-07-19 06:12:53
【问题描述】:
如何在不使用循环的情况下在 Python 中反转列表的顺序?解空间没有其他限制。
【问题讨论】:
-
l.reverse()。这是“Python 反向列表”的第一个 Google 结果,就在文档中。
标签: python list list-comprehension
如何在不使用循环的情况下在 Python 中反转列表的顺序?解空间没有其他限制。
【问题讨论】:
l.reverse()。这是“Python 反向列表”的第一个 Google 结果,就在文档中。
标签: python list list-comprehension
a = ['a','b','c']
你可以试试
b = a[::-1]
它会在不使用循环的情况下反转列表。
您可以在任何序列/容器/可迭代对象上使用相同的技巧来反转项目。
【讨论】:
【讨论】:
由于 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]
【讨论】:
也可以使用内置函数reversed
a = list(reversed(your_list))
【讨论】:
reversed 返回的是一个迭代器,所以你需要使用list 在a 中存储一个列表,而不是一个迭代器。
假设您想要就地更改:
>>> a = [1,2,3]
>>> a.reverse()
>>> a
[3, 2, 1]
>>> a[:] = a[::-1]
>>> a
[1, 2, 3]
【讨论】:
有很多方法:
你可以使用扩展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
【讨论】: