介紹
A list is a data structure in Python that is a mutable, or changeable, ordered sequence of elements. Each element or value that is inside of a list is called an item. Just as strings are defined as characters between quotes, lists are defined by having values between square brackets [ ]
.
列表在處理許多相關值時非常方便。它們使您能夠將屬於同一類別的數據放在一起,簡化您的代碼,並一次對多個值執行相同的方法和操作。
當考慮到 Python 列表和其他類型的集合數據結構時,有必要考慮您計算機上擁有的所有不同集合:您的文件組合、歌曲播放列表、瀏覽器書籤、電子郵件、您可以在流媒體服務中訪問的視頻集合等等。
先決條件
您應該已經安裝了 Python 3,並在計算機或服務器上設置了編程環境。如果您尚未設置編程環境,可以參考安裝和設置指南,搭建適合您操作系統(Ubuntu、CentOS、Debian 等)的 本地編程環境 或 您服務器上的編程環境。
字符串列表
要开始,让我们创建一个包含字符串数据类型项目的列表:
信息:要跟随本教程中的示例代码,您可以通过运行python3
命令在您的本地系统上打开Python交互式Shell。然后您可以通过在>>>
提示后添加、复制或编辑示例来进行操作。
当我们打印出列表时,输出与我们创建的列表完全相同:
Output['shark', 'cuttlefish', 'squid', 'mantis shrimp', 'anemone']
作为一个有序的元素序列,列表中的每个项目都可以通过索引单独调用。列表是由较小的部分组成的复合数据类型,非常灵活,因为可以向其中添加、删除和更改值。当您需要存储大量值或迭代值,并且希望能够方便地修改这些值时,您可能希望使用列表数据类型。
在本教程中,我们将介绍一些在Python中使用列表的方法。
索引列表
列表中的每个项目都对应一个索引号,这是一个从索引号0
开始的整数值。
对于列表sea_creatures
,索引分解如下:
‘shark’ | ‘cuttlefish’ | ‘squid’ | ‘mantis shrimp’ | ‘anemone’ |
---|---|---|---|---|
0 | 1 | 2 | 3 | 4 |
第一項,字串'shark'
從索引0
開始,列表以項目'anemone'
結束,索引為4
。
由於Python列表中的每個項目都有相應的索引號,我們能夠以與其他順序數據類型相同的方式訪問和操作列表。
現在,我們可以通過引用其索引號來調用列表的個別項目:
Outputcuttlefish
此列表的索引號範圍從0
到4
,如上表所示。因此,要個別調用任何項目,我們將像這樣引用索引號:
如果我們使用大於4的索引號調用列表sea_creatures
,它將超出範圍,因為它將無效:
OutputIndexError: list index out of range
除了正索引號外,我們還可以使用負索引號從列表中訪問項目,從列表末尾開始倒數計算,從-1
開始。如果我們有一個長列表並且想要準確指定列表末尾的項目,這將特別有用。
對於相同的列表sea_creatures
,負索引的拆分如下:
‘shark’ | ‘cuttlefish’ | ‘squid’ | ‘mantis shrimp’ | ‘anemone’ |
---|---|---|---|---|
-5 | -4 | -3 | -2 | -1 |
因此,如果我們想要使用其負索引號打印出項目'squid'
,我們可以這樣做:
Outputsquid
我們可以使用+
運算符將列表中的字符串項目與其他字符串串聯:
OutputSammy is a shark
我們能夠將索引號為0
的字符串項與字符串'Sammy is a '
串聯起來。我們還可以使用+
運算符將2個或多個列表串聯在一起。
通過與列表中的項相對應的索引號,我們能夠離散地訪問列表的每個項並處理這些項。
修改列表中的項
我們可以使用索引來更改列表中的項,方法是將索引號設置為不同的值。這使我們能夠更好地控制列表,因為我們能夠修改和更新它們包含的項。
如果我們想要將索引號為1
的項的字符串值從'cuttlefish'
更改為'octopus'
,我們可以這樣做:
現在當我們打印sea_creatures
時,列表將不同:
Output['shark', 'octopus', 'squid', 'mantis shrimp', 'anemone']
我們還可以使用負索引號來更改項的值:
Output['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone']
現在'blobfish'
已取代了負索引號為-3
的'squid'
(對應於正索引號2
)。
能夠修改列表中的項使我們能夠以有效的方式更改和更新列表。
切片列表
我們也可以從列表中選擇幾個項目。假設我們只想打印出sea_creatures
的中間項目,我們可以通過創建一個切片來實現。使用切片時,我們可以通過創建一個由冒號分隔的索引範圍來調用多個值:[x:y]
:
Output['octopus', 'blobfish', 'mantis shrimp']
在創建切片時,就像[1:4]
一樣,第一個索引號是切片開始的地方(包含),第二個索引號是切片結束的地方(不包含),這就是為什麼在我們上面的例子中位置為1
、2
和3
的項目被打印出來。
如果我們想要包含列表的任一端,我們可以在list[x:y]
的語法中省略一個數字。例如,如果我們想要打印列表sea_creatures
的前3個項目 – 也就是'shark'
、'octopus'
、'blobfish'
– 我們可以這樣做:
Output['shark', 'octopus', 'blobfish']
這打印了列表的開頭,停在索引3
之前。
為了包含列表末尾的所有項目,我們將語法反轉:
Output['blobfish', 'mantis shrimp', 'anemone']
我們還可以在切片列表時使用負索引號,類似於正索引號:
Output['octopus', 'blobfish']
['blobfish', 'mantis shrimp', 'anemone']
我們可以在切片時使用的最後一個參數稱為步長(stride),它指的是在從列表中檢索到第一個項目後,要向前移動多少項目。到目前為止,我們已經省略了步長參數,而Python默認步長為1,因此在兩個索引號之間檢索每個項目。
此構造的語法為list[x:y:z]
,其中z
表示步長。讓我們創建一個更大的列表,然後對其進行切片,並將步長設置為2:
Output[1, 3, 5, 7, 9]
我們的構造numbers[1:11:2]
會打印出在索引號為1
(包括)和11
(不包括)之間的值,然後步長值2
告訴程序僅打印每隔一個項目。
我們可以省略前兩個參數,並僅使用步長作為參數,其語法為list[::z]
:
Output[0, 3, 6, 9, 12]
通過將列表numbers
的步長設置為3
,只打印每隔三個項目:
0,1,2,3,4,5,6,7,8,9,10,11,12
使用正索引和負索引數字切片列表並指定步長,讓我們能夠控制列表並獲得我們想要的輸出。
使用運算符修改列表
運算符可用於修改列表。我們將討論使用 +
和 *
運算符及其合成形式 +=
和 *=
。
+
運算符可用於將兩個或多個列表連接在一起:
Output['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic']
由於 +
運算符可用於串聯,因此可以將項目(或多個項目)以列表形式添加到另一個列表的末尾。請記得將項目放在方括號中:
Output['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']
*
運算符可用於將列表乘以數字。也許您需要將目錄中的所有文件複製到服務器上,或者與朋友分享播放列表——在這些情況下,您需要將數據集合進行乘法。
讓我們將 sea_creatures
列表乘以 2,將 oceans
列表乘以 3:
Output['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']
['Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic', 'Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic', 'Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic']
通過使用 *
運算符,我們可以按照指定的次數複製我們的列表。
我們還可以使用 +
和 *
運算符的合成形式與賦值運算符 =
。+=
和 *=
合成運算符可用於快速且自動化地填充列表。例如,您可以使用這些運算符填充列表,其中包含可以稍後使用用戶提供的輸入修改的佔位符。
讓我們將以列表形式添加一個項目到列表 sea_creatures
中。該項目將充當佔位符,我們希望將此佔位符項目添加多次。為此,我們將使用 +=
運算符與一個 for 循環。
Output['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'fish']
['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'fish', 'fish']
['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'fish', 'fish', 'fish']
對於for迴圈的每次迭代,會將額外的'fish'
列表項目添加到原始列表sea_creatures
中。
*=
運算符的行為方式類似:
Output['shark', 'shark']
['shark', 'shark', 'shark', 'shark']
['shark', 'shark', 'shark', 'shark', 'shark', 'shark', 'shark', 'shark']
運算符+
和*
可用於連接列表和乘以列表。複合運算符+=
和*=
可以將列表連接和乘以列表,並將新的標識傳遞給原始列表。
從列表中刪除項目
可以使用del
語句從列表中刪除項目。這將刪除列表中您指定的索引號的值。
從sea_creatures
列表中,讓我們刪除項目'octopus'
。該項目位於索引位置1
。要刪除該項目,我們將使用del
語句,然後調用列表變數和該項目的索引號:
Output['shark', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']
現在,索引位置1
處的項目,字符串'octopus'
,不再存在於我們的列表sea_creatures
中。
我們也可以使用del
語句指定一個範圍。假設我們不僅想刪除項目'octopus'
,還想刪除'blobfish'
和'mantis shrimp'
。我們可以使用del
語句在sea_creatures
中調用一個範圍來完成此操作:
Output['shark', 'anemone', 'yeti crab']
通過使用 del
語句的範圍,我們能夠刪除索引號為 1
(包括)和索引號為 4
(不包括)之間的項目,從而在刪除了 3 個項目後,保留了 3 個項目的列表。
del
語句允許我們從列表數據類型中刪除特定項目。
用列表項目構造列表
列表可以定義為由列表組成的項目,每個括號列表都被包含在父列表的較大括號內:
這些列表內部的列表被稱為嵌套列表。
要訪問此列表中的項目,我們將需要使用多個索引:
OutputSammy
shark
第一個列表,因為它等於一個項目,將具有索引號 0,這將是構造中的第一個數字,而第二個列表將具有索引號 1。在每個內部嵌套列表中,將有單獨的索引號,我們將在第二個索引號中調用:
sea_names[0][0] = 'shark'
sea_names[0][1] = 'octopus'
sea_names[0][2] = 'squid'
sea_names[0][3] = 'mantis shrimp'
sea_names[1][0] = 'Sammy'
sea_names[1][1] = 'Jesse'
sea_names[1][2] = 'Drew'
sea_names[1][3] = 'Jamie'
在處理列表的列表時,重要的是要記住,您需要參考多個索引號,以便訪問相關嵌套列表中的特定項目。
結論
列表数据类型是一种灵活的数据类型,可以在程序执行过程中进行修改。本教程涵盖了列表的基本特性,包括索引、切片、修改和连接列表。
从这里开始,您可以通过阅读“如何使用列表方法”了解更多关于在Python中使用列表的信息,以及关于列表推导来基于现有列表创建列表的内容。要了解更多关于数据类型的一般信息,您可以阅读我们的“理解数据类型”教程。
Source:
https://www.digitalocean.com/community/tutorials/understanding-lists-in-python-3