如何在Python中不使用循环将列表的顺序反转?

4

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


1
l.reverse()。它是“Python反转列表”搜索的第一个谷歌结果就在文档中 - user2357112
6个回答

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

你可以尝试

b = a[::-1]

它将不使用循环反转列表。

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


谢谢。你能解释一下如何解读括号内的参数吗? - Info5ek
1
@user1800340 这是Python的“切片符号”(Slice Notation) :) - TerryA
1
我想我弄明白了。 'list[::x]' 意味着在方向(x的符号)和大小x中迈出步伐。 因此,-1表示每次后退一步,步长为1。 - Info5ek
1
正如Haidro所提到的,@user1800340是列表的切片表示法。您可以参考官方列表文档。它会解释一切。 - tailor_raj
2
切片符号中有三个参数,即起始位置、终止位置和步长。如果您没有提供这些参数,默认情况下起始位置为0,终止位置为-1,表示包括列表中的所有元素,步长为-1,因此从最后一个元素开始迭代并进行反向操作。 - tailor_raj
2
@user1800340 请参考此链接以获取更详细的解释。 - tailor_raj

4

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]

1
您也可以使用内置函数 reversed
a = list(reversed(your_list))

1
@septi 实际上,reversed返回一个迭代器,因此您需要使用list将列表存储在a中,而不是迭代器。 - SethMMorton

1
假设您想要原地进行更改:
>>> a = [1,2,3]
>>> a.reverse()
>>> a
[3, 2, 1]
>>> a[:] = a[::-1]
>>> a
[1, 2, 3]

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接