Python中列表、集合、元组和字典的区别

2025 年 9 月 3 日 | 阅读 7 分钟

List、Set、TupleDictionary 是 Python 中广泛使用的数据结构。这些数据结构在维护和组织数据方面起着至关重要的作用。为了编写高效且有效的 Python 代码,应该了解这些数据结构之间的主要区别。

什么是列表?

Python 中的 list 是一种内置数据结构,允许我们在单个变量中存储多个项。列表是 Python 中使用最广泛的数据结构之一,因为它们是可变的、有序的,并且可以包含不同类型的元素。

列表提供了一种灵活处理数据集合的方式,并附带许多有用的内置方法。列表通常通过将用逗号分隔的元素集合放在方括号 [] 中来定义。

列表的特征

  • 有序:元素以特定顺序存储,其位置(索引)很重要。
  • 可变:创建列表后,可以修改其元素(例如,使用append()insert()、remove()、pop())。
  • 允许重复:列表中可以有相同元素的多个实例。这意味着元素可以重复 n 次。
  • 索引访问:元素通过其索引(通常是整数)进行访问;第一个元素的索引是 0。
Difference between List, Set, Tuple, and Dictionary in Python

让我们看一个 Python 列表的示例。

示例

立即执行

输出

List : [12, 'TpointTech', 3.61, True]
<class 'list'>

说明

在此示例中,我们通过将几种不同数据类型的元素放在方括号 [] 中来创建了一个列表。

什么是 Set?

Set 是一个无序集合。这意味着集合中元素的顺序不固定。Set 始终存储唯一的元素;它们会自动消除任何重复的条目(如果存在于集合中)。

Set 使用花括号 {} 表示,集合中的元素用逗号分隔。通常,set() 函数用于生成空集,而 {} 用于创建空字典。

Set 的特征

  • 无序:Set 中的元素没有特定顺序。
  • 可变:创建后可以向 Set 中添加或删除元素(例如,使用add()remove()discard())。
  • 不允许重复:Set 包含唯一的元素;重复项将被忽略(如果存在)。
Difference between List, Set, Tuple, and Dictionary in Python

以下是一个简单的 Python Set 示例。

示例

立即执行

输出

{'TpointTech', (1, 2, 3), 14}
{'n', 't', 'i', 'T', 'o', 'c', 'p', 'e', 'h'}

说明

在此示例中,我们通过将几个元素放在花括号 {} 中来创建了一个 Set。

什么是元组?

Tuple 是 Python 中的一种内置数据结构,用于存储对象集合。它在索引、嵌套和重复方面与列表非常相似。但元组是不可变的,这意味着一旦创建,我们就无法更改其元素。元组是通过将用逗号分隔的元素放在圆括号 () 中来创建的。

Tuple 的特征

  • 有序:项以明确的顺序存储。
  • 不可变:一旦创建了元组,其项就无法更改(不能添加、删除或修改)。
  • 支持重复:元组可以包含同一元素的多个出现。这意味着一个元素可以存在 n 次。
  • 索引访问:可以通过其索引访问元素,索引从 0 开始。
  • 通常用于固定集合:元组用于表示未来无需更改的记录集合,例如坐标或记录。
  • 比列表稍小:由于元组是不可变的,它们占用的内存比列表少。
Difference between List, Set, Tuple, and Dictionary in Python

现在我们将看一个 Python 元组的示例。

示例

立即执行

输出

Tuple : (19, 'Python', 7.8, True)
<class 'tuple'>

说明

在此示例中,我们通过将几种不同数据类型的元素放在圆括号 () 中来创建了一个元组。

什么是字典?

Dictionary 是 Python 中的一种内置数据结构,我们用它来以“键:值”对的形式存储数据。字典是一个无序(Python 3.7 及更高版本中,插入是有序的)、可变且带索引的集合,其中每个键都是唯一的,并映射到关联的值。

我们通常使用字典来存储相关数据,例如与特定对象或实体相关的信息,可以通过其键轻松检索。

Dictionary 的特征

  • 无序:Dictionary 存储项没有特定的顺序。但是,从 Python 3.7+ 开始,在将键值对插入字典时会保持顺序
  • 可变:可以在字典创建后添加、删除或更改键值对。
  • 唯一键:字典的键必须是唯一的。如果您尝试插入一个具有现有键的新值,则与该键关联的值将被替换。
  • 键访问:元素是通过其键访问的,而不是通过其索引。此功能有助于基于键查找项。
Difference between List, Set, Tuple, and Dictionary in Python

这是一个简单的 Python 字典示例。

示例

立即执行

输出

Dictionary : {'emp_id': 1001, 'name': 'Irfan', 'job_profile': 'Software Developer'}
<class 'dict'>

说明

在此示例中,我们创建了一个字典,其中包含多个用逗号分隔并用花括号 {} 括起来的“键:值”对。

List、Set、Tuple 和 Dictionary 之间的主要区别

以下是 Python 中 List、Set、Tuple 和 Dictionary 之间的主要区别

特性列表Set元组字典
有序是的不能是的是(自 Python 3.7 起)
可变(容器)是(可以添加、删除或修改元素)是(可以添加或删除元素)否(创建后不能更改元素)是(可以添加、删除键值对或修改值)
可变(元素)是(如果元素本身是可变的)是(如果元素本身是可变的)否(如果元组不可变,则元素本身不能被更改)是(值可以是可变的;键必须是不可变的)
重复项允许不允许(只存储唯一元素)允许不允许(键必须唯一;值可以重复)
索引/访问是(基于整数的索引,从 0 开始)否(元素无序,不能通过索引访问)是(基于整数的索引,从 0 开始)是(基于键的访问;使用唯一的键检索值)
哈希不可哈希(不能用作字典的键或集合的元素)可哈希(如果集合中的所有元素都可哈希)可哈希(如果元组中的所有元素都可哈希)不可直接哈希(但其 keys() 和 items() 视图在较新版本的 Python 中可像集合一样进行某些操作)
语法[item1, item2, ...]{item1, item2, ...}(空集:set())(item1, item2, ...)(单元素元组:(item1,)){key1: value1, key2: value2, ...}
常用方法append()、extend()、insert()、remove()、pop()、index()、count()、sort()、reverse()、clear()、copy()add()、remove()、discard()、pop()、clear()、copy()、union()、intersection()、difference()、symmetric_difference()count()、index()get()、keys()、values()、items()、update()pop()、popitem()、clear()、copy()、setdefault()
内存开销由于动态调整大小的能力,对于相同数量的元素,通常比元组高。由于需要哈希表管理来确保唯一性,可能会产生开销。由于大小固定,对于相同数量的元素,通常比列表低。由于存储键和值以及底层哈希表,可能会产生显着的开销。
用例需要修改的有序集合,保持插入顺序,以及可变长度的集合。存储唯一项、成员资格测试、集合代数运算和删除重复项。表示固定数据结构、确保数据完整性、用作字典的键(如果元素可哈希)以及返回多个值。它将键映射到其值,通过键进行高效查找,并表示结构化或标记式数据。

结论

我们学习了很多关于 List、Set、Dictionary 和 Tuple 之间区别的知识。List、Tuple 和 Dictionary(从 Python 3.7 版本开始)是有序的,而 Set 是无序的。同样,List、Set 和 Dictionary 是可变的。我们已经详细讨论了每一个标准。

我们仍然认为还有很多内容有待学习;随着 Python 版本的更新,功能和目标可能会发生变化。

Python 中 List、Set、Tuple 和 Dictionary 的区别 FAQ

1. 什么时候我们可以用列表而不是元组?

当您需要一组可以更改(添加、删除或修改元素)的项,或者元素顺序很重要且可变时,可以使用列表;而当您希望项不可变时,可以使用元组。

2. 使用 Set 的主要好处是什么?

使用 Set 的主要好处是它只能维护唯一元素,并能以高效的方式支持成员资格测试。Set 的操作,如并集、交集和差集,也非常高效。

3. 字典在所有 Python 版本中都具有顺序吗?

不,字典并非在所有 Python 版本中都具有顺序。它们仅在 Python 3.7 及更高版本中才有顺序。

4. 任何数据类型都可以用作字典的键吗?

不,字典的键必须是不可变的,例如字符串数字(整数、浮点数)和元组。列表和其他可变对象不能用作字典键,因为它们的哈希值可能会发生变化。

5. 如果我们要存储一组项,如何在列表和 Set 之间进行选择?

如果项具有特定顺序且我们想要重复项,则应使用列表;但如果我们只需要保留唯一项且顺序不重要,并且可能需要执行集合运算,则可以使用 Set。