簡體   English   中英

如何在不使用循環的情況下反轉Python中列表的順序?

[英]How can one reverse the order of a list in Python without using a loop?

如何在不使用循環的情況下反轉Python中列表的順序? 解決方案空間沒有其他限制。

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

你可以試試

b = a[::-1]

它將在不使用循環的情況下反轉列表。

您可以在任何序列/容器/可迭代上使用相同的技巧來使項目反轉。

list.reverse()

底層實現是否使用了一個我不知道的循環。

數據結構 - Python文檔

由於Python處理列表的方式,這種反向函數效率低下。 但是,它值得理解,因為它展示了如何使用遞歸函數以幾乎適用於任何語言的方式替換循環。 (換句話說,它不依賴於Python的內置功能。)注意l[:1]返回包含ll[1:]的第一項的單項列表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))

假設你想要就地改變:

>>> 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM