4

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

4

6 回答 6

7
a = ['a','b','c']

你可以试试

b = a[::-1]

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

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

于 2013-07-19T06:19:56.443 回答
4

list.reverse()

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

数据结构 - Python 文档

于 2013-07-19T06:21:31.050 回答
2

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

>>> def reverse(l):
...     return reverse(l[1:]) + l[:1] if l else l
... 
>>> reverse([1, 2, 3, 4, 5])
[5, 4, 3, 2, 1]
于 2013-07-19T06:42:44.953 回答
1

您还可以使用内置函数reversed

a = list(reversed(your_list))
于 2013-07-19T06:20:53.870 回答
1

假设您想要就地更改:

>>> a = [1,2,3]
>>> a.reverse()
>>> a
[3, 2, 1]
>>> a[:] = a[::-1]
>>> a
[1, 2, 3]
于 2013-07-19T06:21:04.767 回答
1

有很多方法:

您可以使用扩展列表切片

>>> 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
于 2013-07-19T06:26:31.303 回答