如何在 Python 中反轉列表

Rayven Esplanada 2023年1月30日 2020年11月24日
  1. 在 Python 中使用 range() 來反轉一個列表
  2. 在 Python 中通過 while 迴圈來反轉一個列表
  3. 使用 Python 中的切片運算子反轉一個列表
  4. 在 Python 中使用 reversed() 反轉列表
如何在 Python 中反轉列表

本教程將演示如何在 Python 中用不同的方式來反轉一個列表。

列表反轉是學習程式設計時最常遇到的入門程式設計問題之一。在 Python 中,有幾種簡單的方法可以反轉一個列表。

在 Python 中使用 range() 來反轉一個列表

range() 是一個 Python 內建函式,它輸出一個數字範圍的列表。

range() 的語法

range(start, stop, step)

這個函式有 3 個引數;主要的必要引數是第二個引數 stop,一個表示你要停止的數字。有 2 個可選引數,start 指定你應該從哪裡開始計數,step 指定序列的增量。

請注意,stop 的偏移量為 1,因為計數是從 0 開始的。要使用 range() 建立一個停止在 5 的列表,停止值必須是 6。

numbers = list(range(6))
print(numbers)

輸出:

[0, 1, 2, 3, 4, 5]

要反轉這個列表,你必須指定 startstep 引數。

start 設定為 5,而 step-1,因為我們希望每次都將範圍遞減 1。stop 引數也應該設定為 -1,因為我們想在 0 停止(因為 stop 的偏移量為 1)。

numbers = list(range(5, -1, -1))
print(numbers)

輸出:

[5, 4, 3, 2, 1, 0]

在 Python 中通過 while 迴圈來反轉一個列表

宣告一個由 10 個隨機整陣列成的列表,我們要以反向順序建立一個新的列表。

numbers = [66, 78, 2, 45, 97, 17, 34, 105, 44, 52]

在列表上使用 while 迴圈來反向輸出。首先,得到列表的大小,並將其減去 1,指向列表的最後一個元素。我們也宣告一個空列表來儲存前一個列表的新逆向版本。

idx = len(numbers) - 1
newList = []

現在使用 while 迴圈來迭代並儲存新列表中的每個元素,每次迭代都會遞減 idx,直到達到 0

while (idx >= 0):
  newList.append(numbers[idx])
  idx = idx - 1

print(newList)

輸出:

[52, 44, 105, 34, 17, 97, 45, 2, 78, 66]

使用 Python 中的切片運算子反轉一個列表

如果你不喜歡遍歷列表,那麼可以使用列表切片運算子將陣列索引遞減 1。

range() 類似,切片運算子接受三個引數:startstopstep

將前兩個引數留空,這樣它將覆蓋整個陣列,並將 step 值設定為 -1,這樣它將從陣列的末端開始,每次遞減 1。

newList = numbers[::-1]
print(newList)

輸出:

[52, 44, 105, 34, 17, 97, 45, 2, 78, 66]

在 Python 中使用 reversed() 反轉列表

另一種在 Python 中反轉一個列表的簡單方法是使用內建函式 reversed()。這個函式接受一個列表作為引數,並返回同一個列表的反轉版本的迭代器。

使用上面同樣的例子 numbers,使用這個函式反轉列表。不要忘了將這個函式放在 list() 函式中,以便將 reversed() 的返回值實際儲存到一個列表中。

newList = list(reversed(numbers))
print(newList)

另外,你也可以使 for 迴圈來遍歷反轉的列表迭代器,並直接將其儲存在 newList 中。

newList = [num for num in reversed(numbers)]
print(newList)

這兩種解決方案的輸出都是一樣的。

[52, 44, 105, 34, 17, 97, 45, 2, 78, 66]

總之,Python 提供了一個簡單的方法,通過使用函式 reversed() 來反轉一個列表。你也可以通過在 forwhile 迴圈中手動反轉一個列表。Python 也有一個簡單的方法,如果你對使用切片運算子很熟悉的話,可以在一行中反轉一個列表。

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

相關文章 - Python List