App下載

Python 元組 VS 列表——有什么區(qū)別?

孤帆去悠悠 2021-09-22 16:03:41 瀏覽數(shù) (3095)
反饋

元組和列表是可用于在 Python 中存儲數(shù)據(jù)的四種可用內(nèi)置數(shù)據(jù)類型中的兩種。它們都很有用,乍一看似乎很相似。但是它們有顯著差異,并且每個都最好在不同的情況下使用。本文將為您概述元組和列表的工作原理。我們將討論他們的特征和他們獨特的用法,我將在此過程中介紹他們的差異。您可以使用交互式 Python shell 嘗試本文中顯示的代碼示例,在計算機上安裝 Python 時我們都會附帶安裝這個。讓我們開始吧!

Python 中的元組和列表是什么?

元組和列表都是 Python 中的內(nèi)置數(shù)據(jù)結(jié)構(gòu)。它們是允許您通過存儲一個或多個項目的有序集合來組織數(shù)據(jù)的容器。

元組的類為“元組”, <class 'tuple'>,

列表的類為“列表”, <class 'list'>。

您可以使用type()內(nèi)置函數(shù)并將對象作為要測試的參數(shù)傳遞。這使您可以檢查它是元組還是列表。

假設您創(chuàng)建了一個名為 的元組my_tuple。您可以像這樣檢查它的類型:

>>>type(my_tuple)

#output
<class 'tuple'>

這對于調(diào)試特別有用。

現(xiàn)在讓我們看看元組和列表之間的其他一些相似之處。

Python 中元組和列表的相似之處

正如我之前提到的,元組和列表確實相似,它們共享一些我們現(xiàn)在將介紹的功能。

元組和列表都可以在一個變量下存儲多個項目

元組和列表可以為空,也可以在單個變量下包含一個甚至多個項目。

唯一的區(qū)別在于語法:您可以通過用左括號和右括號包圍來創(chuàng)建元組(),而列表則由左右方括號[]表示和定義。

要創(chuàng)建空元組,您可以單獨使用括號()、 或tuple()構(gòu)造函數(shù)方法。

>>>type(())
<class 'tuple'>

>>>my_tuple = ()

>>>type(my_tuple)
<class 'tuple'>

#or..


>>>my_tuple = tuple()

>>>type(my_tuple)
<class 'tuple'>

要創(chuàng)建一個空列表,您可以單獨使用兩個方括號或調(diào)用list()構(gòu)造函數(shù)方法。

>>>type([])
<class 'list'>


>>>my_list = []

#or..

>>>my_list = list()

當用一個 item創(chuàng)建一個元組時,不要忘記在最后添加一個逗號。

>>>age = (28,)

如果您使用該tuple()方法創(chuàng)建元組,請不要忘記它需要雙括號。

>>>age = tuple((28,))

>>>type(age)
<class 'tuple'>

如果不添加尾隨逗號,Python 將不會將其創(chuàng)建為元組。

>>>age = (28)

>>>type(age)
<class 'int'>

當創(chuàng)建一個列表一個項目,你不必擔心加后面的逗號。

>>> age = [28]

>>> type(age)
<class 'list'>

存儲的項目通常性質(zhì)相似,并以某種方式相互關聯(lián)。

您可以創(chuàng)建僅包含字符串序列、整數(shù)序列或布爾值序列的元組或列表,序列中的每一項都用逗號分隔。

您還可以創(chuàng)建包含不同數(shù)據(jù)類型混合的元組或列表。

>>>my_information = ["Dionysia",27,True,"Lemonaki",7,"Python",False]

#or..

>>>my_information = list(("Dionysia",27,True,"Lemonaki",7,"Python",False))

print(my_information)
['Dionysia', 27, True, 'Lemonaki', 7, 'Python', False]

列表和元組可以包含重復項,值可以重復出現(xiàn)多次。

>>>information = ("Jimmy",50,True,"Kate",50)

>>>print(information)
('Jimmy', 50, True, 'Kate', 50)

or..

>>>my_information = ["Dionysia",27,True,"Lemonaki",7,"Python",False,27,"Python",27]

如果你忘記逗號,你會得到一個錯誤:

>>>information = ("Jimmy" 50,True,"Kate",50)
File "<stdin>", line 1
    >>>information = ("Jimmy" 50,True,"Kate",50)
    ^
SyntaxError: invalid syntax
>>>my_information = ["Dionysia" 28,True,"Lemonaki",7,"Python",False]
 File "<stdin>", line 1
    my_information = ["Dionysia" 28,True,"Lemonaki",7,"Python",False]
                                 ^
SyntaxError: invalid syntax

要檢查長度并確定元組或列表中有多少項,請使用該len()方法。

>>>my_information = ["Dionysia",27,True,"Lemonaki",7,"Python",False,27,"Python",27]

>>>len(my_information)
7

Python 中的元組和列表都支持解包

本質(zhì)上,在創(chuàng)建元組或列表時,正如我之前提到的那樣,許多值被“打包”到一個變量中。

>>>front_end = ("html","css","javascript")

這些值可以“解包”并分配給各個變量。

>>>front_end = ("html","css","javascript")

>>>content,styling,interactivity = front_end

>>>content
'html'

>>>styling
'css'

>>>interactivity
'javascript'

確保您創(chuàng)建的變量與元組/列表中的值的數(shù)字完全相同,否則 Python 會拋出錯誤:

>>>front_end = ("html","css","javascript")

>>>content,styling = front_end
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 2)


#or..


>>>front_end = ("html","css","javascript")

>>>content,styling,interactivity,data =  front_end
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: not enough values to unpack (expected 4, got 3)

在 Python 中,您可以通過元組和列表中的索引訪問項目

如前所述,元組和列表都是項目的有序集合。

順序是固定不變的,并且在程序的整個生命周期中都保持不變。

指定項目的順序自創(chuàng)建之時起將始終保持不變。

元組和列表中的每個值都有一個唯一標識符,也稱為索引。

因此,可以通過引用該索引來訪問元組和列表中的每個項目。

Python(以及大多數(shù)編程語言和一般計算機科學)中的索引從0開始.

因此,第一項的索引為0,第二項的索引為1,依此類推。

將元組或列表的名稱寫入方括號中,然后將索引的名稱寫入方括號中。

>>>names = ("Jimmy","Timmy","John","Kate")

>>>names[2]
'John'

或者像這樣:

>>>programming_languages = ["Python","JavaScript","Java","C"]

>>>programming_languages[0]
'Python'

>>>programming_languages[1]
'JavaScript'

好的,既然我們已經(jīng)看到了它們的相似之處,現(xiàn)在讓我們看看元組和列表的不同之處。

Python中元組和列表的區(qū)別

元組是不可變的,而列表在 Python 中是可變的

元組在 Python 中是不可變的,這意味著一旦你創(chuàng)建了一個元組,它里面的項目就不能改變。

元組不能不斷改變。

如果您嘗試更改其中一項的值,則會出現(xiàn)錯誤:

>>>names = ("Jimmy","Timmy","John","Kate")

>>>names[2] = "Kelly"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

由于元組無法更改,因此您無法添加、替換、重新分配或刪除任何項目。

這也意味著元組具有固定長度。它們的長度在整個程序的生命周期中永遠不會改變。

何時使用元組

如果您希望集合中的數(shù)據(jù)為只讀、永不更改并始終保持不變,則元組非常適合使用。

由于這種能力和數(shù)據(jù)永遠不會改變的保證,元組可以用在字典和集合中,這要求包含在其中的元素是不可變的類型。

何時使用列表

另一方面,您可以輕松更改和修改列表,因為列表是可變的。

這意味著列表是可變的——您可以將項目添加到列表、從列表中刪除項目、移動項目以及在列表中輕松切換它們。

當您希望數(shù)據(jù)靈活或不總是保持不變并在需要時進行修改時,列表非常有用。

列表支持各種內(nèi)置的 Python 方法,這些方法對列表執(zhí)行某些您不能在元組上使用的操作。

這意味著列表的長度和大小在程序的整個生命周期中增長和縮小。

現(xiàn)在讓我們看看一些更改列表的簡單方法。

如何在 Python 中更新列表

由于列表是可變的,因此您需要了解更新其中數(shù)據(jù)的一些基本方法。

如何在 Python 中更新列表中的項目

要更新列表中的單個特定項目,請在方括號中引用其索引號,然后為其分配一個新值。

#general syntax
>>>list_name[index] = new_value

>>>programming_languages = ["Python","JavaScript","Java","C"]
>>>print(programming_languages)
['Python', 'JavaScript', 'Java', 'C']

>>>programming_languages[2] = "C++"
>>>print(programming_languages)
['Python', 'JavaScript', 'C++', 'C']

如何將項目添加到 Python 中的列表

Python 中有一些內(nèi)置方法可以將項目添加到列表中。

append()方法將一個新項目添加到列表的末尾。

#general syntax
>>>list_name.append(item)

>>>programming_languages = ["Python","JavaScript","Java","C"]
>>>print(programming_languages)
['Python', 'JavaScript', 'Java', 'C']

>>>programming_languages.append("C++")

>>>print(programming_languages)
['Python', 'JavaScript', 'Java', 'C', 'C++']

要在特定位置添加一項,請使用insert()方法。

這將在給定位置的列表中插入一個項目。列表中在您要添加的項目之后的其余元素都被向右推了一個位置。

#general syntax
>>>list_name.insert(index,item)

>>>names = ["Cody","Dillan","James","Nick"]
>>>print(names)
['Cody', 'Dillan', 'James', 'Nick']


>>>names.insert(0,"Stephanie")

>>>print(names)
['Stephanie', 'Cody', 'Dillan', 'James', 'Nick']

如果要向列表中添加多個項目,請使用extend()方法。

這會在列表的末尾添加一個可迭代對象。例如,您可以在現(xiàn)有列表的末尾添加一個新列表。

#general syntax
>>>list_name.extend(iterable)

>>>programming_languages = ["Python","JavaScript"]
>>>more_programming_languages = ["Java","C"]

#add more_programming_languages to programming_languages
>>>programming_languages.extend(more_programming_languages) 

>>>print(programming_languages)
['Python', 'JavaScript', 'Java', 'C']

如何從 Python 中的列表中刪除項目

Python 中有兩種內(nèi)置方法可用于從列表中刪除項目。

一是remove()方法。這將刪除您指定的項目的第一個實例。

#general syntax
>>>list_name.remove(item)

>>>programming_languages = ["Python", "JavaScript", "Java", "C"]
>>>print(programming_languages)
['Python', 'JavaScript', 'Java', 'C']

>>>programming_languages.remove("Java")
>>>print(programming_languages)
['Python', 'JavaScript', 'C']

#deletes only first occurence
>>>programming_languages = ["Python", "JavaScript", "Java", "C","Python"]
>>>programming_languages.remove("Python")
>>>print(programming_languages)
['JavaScript', 'Java', 'C', 'Python']

另一種方法是使用pop()方法。

不傳遞參數(shù),它將刪除列表中的最后一項。

您可以將要刪除的特定項目的索引作為參數(shù)傳入。

在這兩種情況下,都會返回移除的值,這很有用。如果需要,可以將其存儲在變量中以備后用。

>>>programming_languages = ["Python", "JavaScript", "Java", "C"]

>>>programming_languages.pop()
'C'


>>>print(programming_languages)
['Python', 'JavaScript', 'Java']

#store returned value in a variable
>>>programming_languages = ["Python", "JavaScript", "Java", "C"]

>>>fave_language = programming_languages.pop(0)
>>>print(fave_language)
Python

0 人點贊