Python 元组 VS 列表——有什么区别?

2021-09-22 16:03:41 浏览数 (2923)

元组和列表是可用于在 Python 中存储数据的四种可用内置数据类型中的两种。它们都很有用,乍一看似乎很相似。但是它们有显着差异,并且每个都最好在不同的情况下使用。本文将为您概述元组和列表的工作原理。我们将讨论他们的特征和他们独特的用法,我将在此过程中介绍他们的差异。您可以使用交互式 Python shell 尝试本文中显示的代码示例,在计算机上安装 Python 时我们都会附带安装这个。让我们开始吧!

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

元组和列表都是 Python 中的内置数据结构。它们是允许您通过存储一个或多个项目的有序集合来组织数据的容器。

元组的类为“元组”, <class 'tuple'>,

列表的类为“列表”, <class 'list'>。

您可以使用type()内置函数并将对象作为要测试的参数传递。这使您可以检查它是元组还是列表。

假设您创建了一个名为 的元组my_tuple。您可以像这样检查它的类型:

>>>type(my_tuple)

#output
<class 'tuple'>

这对于调试特别有用。

现在让我们看看元组和列表之间的其他一些相似之处。

Python 中元组和列表的相似之处

正如我之前提到的,元组和列表确实相似,它们共享一些我们现在将介绍的功能。

元组和列表都可以在一个变量下存储多个项目

元组和列表可以为空,也可以在单个变量下包含一个甚至多个项目。

唯一的区别在于语法:您可以通过用左括号和右括号包围来创建元组(),而列表则由左右方括号[]表示和定义。

要创建空元组,您可以单独使用括号()、 或tuple()构造函数方法。

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

>>>my_tuple = ()

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

#or..


>>>my_tuple = tuple()

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

要创建一个空列表,您可以单独使用两个方括号或调用list()构造函数方法。

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


>>>my_list = []

#or..

>>>my_list = list()

当用一个 item创建一个元组时,不要忘记在最后添加一个逗号。

>>>age = (28,)

如果您使用该tuple()方法创建元组,请不要忘记它需要双括号。

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

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

如果不添加尾随逗号,Python 将不会将其创建为元组。

>>>age = (28)

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

当创建一个列表一个项目,你不必担心加后面的逗号。

>>> age = [28]

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

存储的项目通常性质相似,并以某种方式相互关联。

您可以创建仅包含字符串序列、整数序列或布尔值序列的元组或列表,序列中的每一项都用逗号分隔。

您还可以创建包含不同数据类型混合的元组或列表。

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

列表和元组可以包含重复项,值可以重复出现多次。

>>>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 中的元组和列表都支持解包

本质上,在创建元组或列表时,正如我之前提到的那样,许多值被“打包”到一个变量中。

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

这些值可以“解包”并分配给各个变量。

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

>>>content,styling,interactivity = front_end

>>>content
'html'

>>>styling
'css'

>>>interactivity
'javascript'

确保您创建的变量与元组/列表中的值的数字完全相同,否则 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 中,您可以通过元组和列表中的索引访问项目

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

顺序是固定不变的,并且在程序的整个生命周期中都保持不变。

指定项目的顺序自创建之时起将始终保持不变。

元组和列表中的每个值都有一个唯一标识符,也称为索引。

因此,可以通过引用该索引来访问元组和列表中的每个项目。

Python(以及大多数编程语言和一般计算机科学)中的索引从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'

好的,既然我们已经看到了它们的相似之处,现在让我们看看元组和列表的不同之处。

Python中元组和列表的区别

元组是不可变的,而列表在 Python 中是可变的

元组在 Python 中是不可变的,这意味着一旦你创建了一个元组,它里面的项目就不能改变。

元组不能不断改变。

如果您尝试更改其中一项的值,则会出现错误:

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

由于元组无法更改,因此您无法添加、替换、重新分配或删除任何项目。

这也意味着元组具有固定长度。它们的长度在整个程序的生命周期中永远不会改变。

何时使用元组

如果您希望集合中的数据为只读、永不更改并始终保持不变,则元组非常适合使用。

由于这种能力和数据永远不会改变的保证,元组可以用在字典和集合中,这要求包含在其中的元素是不可变的类型。

何时使用列表

另一方面,您可以轻松更改和修改列表,因为列表是可变的。

这意味着列表是可变的——您可以将项目添加到列表、从列表中删除项目、移动项目以及在列表中轻松切换它们。

当您希望数据灵活或不总是保持不变并在需要时进行修改时,列表非常有用。

列表支持各种内置的 Python 方法,这些方法对列表执行某些您不能在元组上使用的操作。

这意味着列表的长度和大小在程序的整个生命周期中增长和缩小。

现在让我们看看一些更改列表的简单方法。

如何在 Python 中更新列表

由于列表是可变的,因此您需要了解更新其中数据的一些基本方法。

如何在 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 中有一些内置方法可以将项目添加到列表中。

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()方法。

这会在列表的末尾添加一个可迭代对象。例如,您可以在现有列表的末尾添加一个新列表。

#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 中有两种内置方法可用于从列表中删除项目。

一是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()方法。

不传递参数,它将删除列表中的最后一项。

您可以将要删除的特定项目的索引作为参数传入。

在这两种情况下,都会返回移除的值,这很有用。如果需要,可以将其存储在变量中以备后用。

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