Python四种内置数据结构详解:列表、字典、集合与元组

陆景行
陆景行
发布时间:2026-10-13| 3人浏览过
原创

本文详细解析Python的四种核心内置数据结构:列表(List)、字典(Dict)、集合(Set)和元组(Tuple)。涵盖各结构的定义、增删改查操作、内存引用特性及适用场景,通过代码示例展示切片、遍历、集合运算等关键用法,帮助开发者根据数据特性选择最优存储方案。

Python内置数据结构概述

各类编程语言通常都提供特定的容器类型来存储数据,例如Java中的集合与数组。Python同样具备此类结构,用于高效管理数据。

Python内置了四种主要的容器类型来存储数据,它们作为语言核心部分,无需额外导入即可直接使用。

列表(List):动态数组与操作

一、列表(List)

列表是一种与Java和C语言中数组相似的数据结构,用于保存一系列有序且相似的元素。不同之处在于,列表中的元素可以是不同的数据类型,且列表长度可变。

列表支持动态增删元素,这一点类似于Java中的StringBuilder对象。值得注意的是,列表复制时不能直接使用赋值语句,否则两个变量将指向同一内存地址,导致修改一个变量时另一个也随之改变。正确的复制方式应使用copy()方法。

存储结构的基本功能包括增加、删除和查看元素:

1. 列表元素的增加

  1. append()方法将指定元素直接添加到列表末尾,同时增加列表长度。
  2. extend()方法将另一个列表的所有元素追加到当前列表末尾,从而合并两个列表。
  3. insert()方法将元素插入到指定索引位置。需注意,该方法不能用于在列表末尾插入元素(应使用append)。

2. 列表元素的删除

  1. remove()方法删除列表中第一个匹配指定值的元素。若列表中不存在该值,解释器将报错。
  2. pop()方法删除指定索引位置的元素并返回该元素。若未提供参数,默认删除并返回最后一个元素。若指定索引不存在,解释器同样会报错。

以下通过简单示例说明上述方法的使用:


#在 Don't panic变为 on tap
phrase="Don't panic"

plist=list(phrase) #将phrase表示的字符串转化为列表


print(phrase)    #将该字符串输出
print(plist)    #结果为['D', 'o', 'n', "'", 't', ' ', 'p', 'a', 'n', 'i', 'c']

plist.remove("'")  #将‘在列表中删除

for i in range(3):
  plist.pop()   #将列表末尾的3个字符给删除,'n','i','c'

plist.pop(0)    #将plist中索引对应的对象删除,也就是D

#此时list中的值为['o', 'n', 't', ' ', 'p', 'a']

plist.extend([plist.pop(5),plist.pop(4)]) #将p和a的位置交换

plist.insert(2,plist.pop(3)) #将空格插入到对应索引为2的对象前

phrase =''.join(plist) #将列表转化为字符串

print(phrase)

3. 列表元素的查看

列表的查看功能与数组类似,支持下标访问,但功能更为丰富。

  1. a. 使用中括号加下标可访问任意元素,下标从0开始。与数组不同,列表支持负数下标,表示从右向左计数,正数表示从左向右。
  2. b. 列表支持切片操作,用于获取某一段元素。语法为list[开始位置:结束位置:步长],所有参数均可省略,至少保留一个元素即可。例如:
  3. list[::2]表示从索引0开始,到列表末尾结束,步长为2。

以下代码展示切片用法:


#在 Don't panic变为 on tap
phrase="Don't panic"

plist=list(phrase)
new_phase=''.join(plist[1:3])#在列表中截取on
print(new_phase)
new_phase=new_phase+''.join([plist[5],plist[4],plist[7],plist[6]])


#切片的实例,以及负数

plist[-1] # c

temp =plist[5:1:-1] #[' ', 't', "'", 'n']当步长为负数时其结果时从右到左遍历
temp2=plist[::2]#['D', 'n', 't', 'p', 'n', 'c'],从头遍历到尾步长为2

对于存储相似对象,列表是理想选择。但对于具有复杂结构的数据,列表难以有效存储数据间的结构关系。

因此,对于结构化数据,通常采用字典进行存储。

字典(Dict):键值对映射

二、字典(Dict)

字典用于保存键值对集合,每个唯一键对应一个值。字典常被称为关联数组。熟悉Java的读者会发现,字典类似于Java中的Map(原文误写为set,此处按Python实际特性描述为键值对映射)。Python字典无序,不保留插入顺序,但基于高度优化的哈希算法,仍能快速访问与键相关的值。

1. 字典的定义

其结构为{键1:值1, 键2:值2},开始和结束使用大括号,键值间用冒号分隔,不同键值对间用逗号分隔。值可以是列表或另一个字典。

2. 字典的增加

字典是动态集合,可在键不存在时插入新键值对。但直接引用未初始化的键会引发KeyError。例如,在商店场景中,若不确定苹果是否存在,不能直接引用苹果的值。添加时需先检查。Python提供了setdefault()方法,可直接调用以简化这一过程。

以下代码展示字典添加操作:


#字典的添加键值对
fruit={}
#当直接使用不存在的键值对时

fruit['apple']+=1 #没有对该键初始化而直接使用会出现keyError

#当不使用setdefault方法时动态的增加键值对
if 'apple' not in fruit:
  fruit['apple']=0 #初始化键值
fruit['apple']+=1 #增加苹果的量
print(fruit['apple'])

#使用setdefault时,其实就是设置一个默认值,确保使用时这个使用的键存在即可

fruit.setdefault('apple',0)#当键存在时这个语句没有任何作用,相当于上面选择的分装
fruit['apple']+=1
print(fruit['apple'])

3. 字典的遍历

对于集合,通常使用循环遍历所有元素。但仅用循环处理字典时,解释器默认只处理键,值仍需通过键查找。Python提供了items()方法,允许在循环中直接访问字典的键和值。

以下代码说明字典遍历:


fruit={'apple':10,'pears':5,'bananas':20,'orange':4}
#直接使用for循环遍历
for i in fruit:
  print("种类",i,"数量",fruit[i])
#使用items方法遍历
for i,v in fruit.items():
  print("种类",i,"数量",v)

4. 字典元素的删除

Python字典删除有三种方法:clear()删除所有元素;pop()根据参数删除指定键的键值对;popitem()随机删除并返回一个键值对。对于结构化数据,字典能保存结构并保证记录不重复。但对于不希望重复的非结构化数据,字典和列表均不适用,此时应考虑使用集合。

集合(Set):无序唯一元素

三、集合(Set)

1. 集合的定义

{元素1, 元素2, 元素3...}与字典类似,使用大括号定义,但无冒号分隔。另一种定义方法是向set()函数传递任意序列(如字符串set('fsdaf'))。

2. 集合的运算

Python集合同数学集合一样,支持交、并、差运算。并集使用union()方法,返回两个集合的所有元素;差集使用difference()方法,返回仅存在于调用集合中的元素;交集使用intersection()方法,返回两个集合共有的元素。

以下代码实现上述集合运算:


#集合的运算
temp={'a','e','i','o','u'}
temp2=set("fda");

#交运算
result=temp.intersection(temp2)#{'a'}

#并运算
result=temp.union(temp2)#{'a', 'o', 'f', 'd', 'u', 'e', 'i'}

#差运算
result=temp.difference(temp2)#{'o', 'e', 'u', 'i'}

变量值可重新赋予,而常量不可。Python中同样存在一种不可变结构,称为元组。

元组(Tuple):不可变序列

四、元组(Tuple)

1. 元组的定义

元组与列表密切相关,列表使用中括号定义,元组则使用小括号定义(元素1, 元素2, 元素3...)。需注意,单个对象定义时不能仅写(对象),而应写(对象,),否则不是元组。

最后说明四种内置结构为空时的表示方法:1. 空列表[];2. 空字典{};3. 空集合set();4. 空元组()。

以上介绍了Python四种内置数据结构的详细用法,希望有所帮助。如有任何疑问,欢迎留言,小编会及时回复。感谢大家对本站的支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。