Python内建数据结构详解:列表、元组、字典、序列与集合

叶初
叶初
发布时间:2026-10-12 | 3人浏览过
原创

本文系统讲解Python五大内建数据结构:列表(List)、元组(Tuple)、字典(Dictionary)、序列(Sequence)及集合(Set)。涵盖定义语法、核心操作、索引与切片机制,以及各类型的特性对比与适用场景,帮助开发者掌握高效数据处理技巧。

一、列表(List)

列表(list)是一种用于存储有序项目序列的数据结构。在定义时,列表中的各项需以逗号分隔,并用一对中括号 [] 将所有元素包裹起来,以此标识其为列表类型。以下示例展示了列表的一些基础操作方法:

# 定义一个 list 对象 class_list:
class_list = ['Michael', 'Bob', 'Tracy']
# 获得一个 class_list 的长度
print 'class have', len(class_list), 'students'
# 访问class_list中的对象
print 'The 3rd student in class is', class_list[2]
# 往 class_list 中插入对象
class_list.append('Paul')
# 从 class_list 中删除一个项目
del class_list[0]
# 对 class_list 进行排序
class_list.sort()
# 遍历整个class_list中的项目
print 'These students are :',
for student in class_list:
  print student,

代码执行后的输出结果如下:

class have 3 students The 3rd student in class is Tracy These students are : Bob Paul Tracy

针对上述代码,有几点关键注意事项需要说明:

列表具有高度的灵活性,可以向 class_list 中添加任意类型的对象,无需强制要求列表内所有元素类型一致。此外,列表中甚至可以嵌套另一个列表。需要区分的是,列表的排序方法(如 sort)是直接修改原对象,而非返回副本;这与字符串类型不同,因为字符串是不可变对象。在打印输出时,print 函数的 end 关键字参数用于指定输出结束后的字符,默认值为换行符。示例代码中通过设置 end=' ' 将换行符替换为空格,从而实现了同行输出。

二、元组(Tuple)

元组(tuple)在概念和用法上与列表非常相似,可以将其视为列表的“只读”版本。一旦元组被定义,其内容便不可更改——既不能添加新元素,也不能删除现有元素,更无法修改元组中已有的对象。

元组内的元素同样以逗号分隔,并使用圆括号 () 包裹以表明其为元组类型。值得注意的是,定义元组时的圆括号是可选的。因此,以下两种写法均能正确定义一个元组:

t = 'Adam', 'Lisa', 'Bart' t = ('Adam', 'Lisa', 'Bart') 尽管省略圆括号在语法上可行,但这并非良好的编程习惯。另外,当定义仅包含单个元素的元组时,必须在元素后添加逗号。例如,应定义为 t = ('Adam',)。这一看似奇怪的约束旨在消除歧义:若省略逗号且无括号,t = 'Adam' 将被解释为字符串赋值,而非单元素元组。

三、字典(Dictionary)

字典(dictionary)本质上是键-值(key-value)对的集合。字典中的键必须是唯一的,且每个键都对应一个特定的值。键对象必须是不可变的(例如元组、数值或字符串)。此外,字典内部的键值对并不保持任何特定的排序顺序。

字典的定义遵循特定格式:d={key1 : value1, key2 : value2, key3 : value3}。键与值之间使用冒号 : 分隔,不同的键值对之间使用逗号 , 分隔,最后用大括号 {} 将所有内容包裹。以下是字典的一些基本操作示例:

# 字典的定义
d = {
  'Adam': 95,
  'Lisa': 85,
  'Bart': 59
}
# 通过键来获取值
print "Adam's score is", d['Adam']
# 删除一个键值对
del d['Bart']
# 遍历字典
for name, score in d.items():
  print '{0} is {1}'.format(name, score)
# 往字典中增加一个键值对
d['Paul'] = 72
# 判断字典中是否存在某键,也可以用 if ab.has_key('Lisa')
if 'Lisa' in d:
  print "Lisa's address is", d['Lisa']

上述代码的输出结果为:

Adam's score is 95
Lisa is 85
Adam is 95
Lisa's address is 85


四、序列(Sequences)

前文介绍的列表、元组和字典均属于序列范畴,而索引操作是序列的一项基本功能。通过下标索引,可以直接访问序列中的特定对象。前文已演示了索引操作:列表和元组使用数字下标,而字典使用关键字下标。

序列的下标索引从 0 开始。前文示例仅展示了正数下标的情况,实际上下标还可以为负数,如 -1、-2、-3 等。负数下标表示从序列末尾反向计数的位置,例如 class_list[-1] 返回的是 class_list 中的最后一个元素。

序列不仅支持负数下标,还支持双下标切片操作。双下标表示一个区间,例如 class_list[0:3] 返回的是从下标 0 到下标 3 之前(即不包含下标 3)的子序列副本。需注意,该区间为半开半闭区间 [start, end)。若切片操作的结束下标超出序列范围,切片操作会自动在序列末尾终止。切片操作中的两个下标均有默认值:起始下标默认为 0,结束下标默认为序列的长度。

切片操作还可以接受第三个参数,用于指定步长,默认值为 1。步长决定了选取元素之间的间隔。例如,name[0:10:3] 返回的是 name 中下标为 0、3、6、9 的元素组成的子序列。

五、集合(Set)

集合(set)是无序简单对象的聚集。当用户仅关注对象是否存在于集合中,而不关心其顺序或出现次数时,使用集合最为适宜。集合的基本功能包括:判断对象是否为集合成员、检查一个集合是否为另一个集合的子集,以及获取两个集合的交集等。以下是集合操作的实例:

s = set(['Adam', 'Lisa', 'Bart', 'Paul'])
# 判断对象是否在集合中
if 'Bart' in s:
  print "Bart is in ?", 'Bart' in s
# 使用copy函数来拷贝一个set
sc = s.copy()
# 往集合中添加对象
sc.add('Bill')
# 从集合中删除对象
sc.remove('Adam')
# 求两个集合的交集,也可以使用 s.intersection(sc)
print s & sc

代码执行后的输出结果如下:

Bart is in ? True
set(['Lisa', 'Paul', 'Bart'])

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表