如何在Python中不使用循环将列表的顺序反转?解决方案的空间上没有其他限制。
如何在Python中不使用循环将列表的顺序反转?解决方案的空间上没有其他限制。
a = ['a','b','c']
你可以尝试
b = a[::-1]
它将不使用循环反转列表。
您可以在任何序列/容器/可迭代对象上使用相同的技巧来获取反向项目。
由于Python处理列表的方式,这个反转函数效率不高。然而,它值得理解,因为它展示了如何使用递归函数以一种可以适应几乎任何语言的方式替换循环(换句话说,它不依赖于Python的内置功能)。请注意,l[:1]
返回一个包含l
的第一个元素的单项列表,而l[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]
reversed
。a = list(reversed(your_list))
reversed
返回一个迭代器,因此您需要使用list
将列表存储在a
中,而不是迭代器。 - SethMMorton>>> a = [1,2,3]
>>> a.reverse()
>>> a
[3, 2, 1]
>>> a[:] = a[::-1]
>>> a
[1, 2, 3]
有很多种方法:
您可以使用扩展的列表切片:
>>> 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
l.reverse()
。它是“Python反转列表”搜索的第一个谷歌结果,就在文档中。 - user2357112