如何在不使用循环的情况下反转Python中列表的顺序?解决方案空间没有其他限制。
答案 0 :(得分:6)
a = ['a','b','c']
你可以尝试
b = a[::-1]
它将在不使用循环的情况下反转列表。
您可以在任何序列/容器/可迭代上使用相同的技巧来使项目反转。
答案 1 :(得分:4)
答案 2 :(得分:2)
由于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]
答案 3 :(得分:1)
您还可以使用内置函数reversed
a = list(reversed(your_list))
答案 4 :(得分:1)
假设你想要就地改变:
>>> a = [1,2,3]
>>> a.reverse()
>>> a
[3, 2, 1]
>>> a[:] = a[::-1]
>>> a
[1, 2, 3]
答案 5 :(得分:1)
有很多方法:
您可以使用扩展的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