Python四种内置数据结构详解:列表、字典、集合与元组
本文详细解析Python的四种核心内置数据结构:列表(List)、字典(Dict)、集合(Set)和元组(Tuple)。涵盖各结构的定义、增删改查操作、内存引用特性及适用场景,通过代码示例展示切片、遍历、集合运算等关键用法,帮助开发者根据数据特性选择最优存储方案。
Python内置数据结构概述
各类编程语言通常都提供特定的容器类型来存储数据,例如Java中的集合与数组。Python同样具备此类结构,用于高效管理数据。
Python内置了四种主要的容器类型来存储数据,它们作为语言核心部分,无需额外导入即可直接使用。
列表(List):动态数组与操作
一、列表(List)
列表是一种与Java和C语言中数组相似的数据结构,用于保存一系列有序且相似的元素。不同之处在于,列表中的元素可以是不同的数据类型,且列表长度可变。
列表支持动态增删元素,这一点类似于Java中的StringBuilder对象。值得注意的是,列表复制时不能直接使用赋值语句,否则两个变量将指向同一内存地址,导致修改一个变量时另一个也随之改变。正确的复制方式应使用copy()方法。
存储结构的基本功能包括增加、删除和查看元素:
1. 列表元素的增加
- append()方法将指定元素直接添加到列表末尾,同时增加列表长度。
- extend()方法将另一个列表的所有元素追加到当前列表末尾,从而合并两个列表。
- insert()方法将元素插入到指定索引位置。需注意,该方法不能用于在列表末尾插入元素(应使用append)。
2. 列表元素的删除
- remove()方法删除列表中第一个匹配指定值的元素。若列表中不存在该值,解释器将报错。
- 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. 列表元素的查看
列表的查看功能与数组类似,支持下标访问,但功能更为丰富。
- a. 使用中括号加下标可访问任意元素,下标从0开始。与数组不同,列表支持负数下标,表示从右向左计数,正数表示从左向右。
- b. 列表支持切片操作,用于获取某一段元素。语法为list[开始位置:结束位置:步长],所有参数均可省略,至少保留一个元素即可。例如:
- 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四种内置数据结构的详细用法,希望有所帮助。如有任何疑问,欢迎留言,小编会及时回复。感谢大家对本站的支持!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













