跳到主要内容Python 四大数据类型详解:字典、列表、集合与元组 | 极客日志Python算法
Python 四大数据类型详解:字典、列表、集合与元组
Python 中的四大数据类型包括列表、字典、集合和元组。列表是有序可变集合,支持索引访问和切片;字典是无序键值对映射,通过键访问数据;集合是无序唯一元素集合,支持数学运算;元组是有序不可变序列。掌握这些数据结构对于提升编程效率至关重要,它们各自在定义语法、可变性、索引方式及查找效率上存在显著差异。列表适合频繁增删改,字典适合快速查找,集合适合去重,元组适合存储常量。
古灵精怪3 浏览 Python 是一门简洁、易读且功能强大的编程语言,其内置的数据结构是编写高效代码的基础。其中字典(Dictionary)、列表(List)、集合(Set)和元组(Tuple)是最常用的四种数据结构,它们各有特点和用途。掌握它们的区别与适用场景对提升编程效率至关重要。
一、列表(List)
列表是 Python 中最基础的数据结构之一,它是一个有序的元素集合。你可以将它想象成一个容器,里面可以放置各种数据类型的元素,而且可以随时添加或删除元素。
1. 创建列表
创建一个列表非常简单,只需要将元素放在方括号 [] 中,并用逗号 , 分隔即可。
fruits = ["苹果", "香蕉", "橙子"]
print(fruits)
2. 访问列表元素
你可以通过索引来访问列表中的元素,索引是从 0 开始的。负数索引表示从末尾开始计数。
print(fruits[0])
print(fruits[-1])
3. 修改列表元素
列表是可变的(Mutable),你可以修改其元素的值。
fruits[0] = "葡萄"
print(fruits)
4. 添加和删除元素
append(): 在列表末尾添加元素。
insert(): 在指定位置插入元素。
remove(): 删除指定值的第一个匹配项。
pop(): 删除并返回指定位置的元素(默认为最后一个)。
clear(): 清空列表。
fruits.append("樱桃")
fruits.insert(1, "草莓")
fruits.remove("香蕉")
removed_item = fruits.pop(2)
print(fruits)
print(removed_item)
5. 列表切片
你可以使用切片来获取列表的一部分,切片的语法是 start:stop:step,其中 start 是切片开始的位置,stop 是切片结束的位置(不包括),step 是步长。
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(numbers[1:8:2])
print(numbers[::-1])
6. 列表推导式
列表推导式是一种简洁的创建列表的方法,常用于数据转换或过滤。
squares = [x ** 2 for x in range(10)]
print(squares)
evens = [x for x in range(10) if x % 2 == 0]
print(evens)
7. 性能与注意事项
- 列表适合需要频繁增删改操作的场景。
- 注意浅拷贝与深拷贝的区别,避免引用问题。
- 查找元素的时间复杂度为 O(n),大量数据时建议使用集合或字典。
二、字典(Dictionary)
字典是一种无序的键值对集合(Python 3.7+ 保持插入顺序),每个键都映射到一个值。键必须是不可变的类型(如字符串、数字或元组),而值可以是任意对象。
1. 创建字典
创建字典的语法是 {key1: value1, key2: value2, ...}。
person = {"name": "张三", "age": 30, "city": "北京"}
print(person)
2. 访问字典元素
你可以使用方括号 [] 和键来访问字典中的值。如果键不存在,会抛出 KeyError,建议使用 get() 方法避免报错。
print(person["name"])
print(person.get("gender"))
3. 修改和添加字典元素
person["age"] = 31
person["gender"] = "男"
print(person)
4. 删除字典元素
你可以使用 del 语句或 pop() 方法来删除字典元素。
del person["city"]
removed_age = person.pop("age")
print(person)
5. 字典推导式
和列表推导式类似,字典也支持推导式,常用于数据转换。
squares = {x: x ** 2 for x in range(10)}
print(squares)
6. 常用方法
keys(), values(), items(): 获取键、值或键值对视图。
update(): 合并另一个字典。
for key, value in person.items():
print(f"{key}: {value}")
三、集合(Set)
集合是一个无序且不重复的元素集合,类似于数学中的集合概念。它主要用于去重和集合运算。
1. 创建集合
创建集合的语法是 {element1, element2, ...},或者使用 set() 函数。
fruits = {"苹果", "香蕉", "橙子"}
print(fruits)
numbers = set([0, 1, 2, 3, 4, 5])
print(numbers)
2. 添加和删除元素
你可以使用 add() 方法添加元素,使用 remove() 或 discard() 方法删除元素。
fruits.add("葡萄")
fruits.remove("香蕉")
fruits.discard("西瓜")
print(fruits)
3. 集合运算
集合支持常见的数学集合运算,如并集、交集、差集等。
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
print(a | b)
print(a & b)
print(a - b)
print(a ^ b)
4. 应用场景
- 快速去重:
list(set(my_list))
- 判断成员关系:时间复杂度 O(1)
- 计算共同点或差异点
四、元组(Tuple)
元组是一个不可变的有序元素集合,一旦创建就不能修改。它比列表更轻量,且可哈希,常用作字典的键。
1. 创建元组
创建元组的语法是 (element1, element2, ...),如果元组只有一个元素,后面必须加逗号 ,。
t = (1, 2, 3)
print(t)
single = (1,)
print(single)
empty = ()
2. 访问元组元素
3. 元组运算
t1 = (1, 2, 3)
t2 = (4, 5, 6)
print(t1 + t2)
print(t1 * 3)
4. 解包与不可变性陷阱
- 解包:可以将元组赋值给多个变量。
- 可变对象:虽然元组不可变,但如果元组中包含可变对象(如列表),这些可变对象是可以被修改的。
coords = (10, [20, 30])
print(coords[1][0])
coords[1].append(40)
print(coords)
五、核心区别对比
| 特性 | 字典 (Dictionary) | 列表 (List) | 集合 (Set) | 元组 (Tuple) |
|---|
| 定义 | 由键值对组成 | 有序的元素集合 | 无序的唯一元素集合 | 有序的元素集合 |
| 语法 | {键 1: 值 1, ...} | [元素 1, ...] | {元素 1, ...} | (元素 1, ...) |
| 可变性 | 可变 | 可变 | 可变 | 不可变 |
| 索引方式 | 通过键访问 | 通过位置索引 | 不能通过索引 | 通过位置索引 |
| 重复元素 | 键唯一,值可重复 | 允许 | 不允许 | 允许 |
| 排序 | 3.7+ 按插入顺序 | 保持插入顺序 | 无序 | 保持插入顺序 |
| 查找效率 | 高 (哈希表) | 低 (遍历) | 高 (哈希表) | 低 (遍历) |
| 可哈希性 | 键必须可哈希 | 不可哈希 | 元素必须可哈希 | 可哈希 |
| 典型用途 | 配置、映射 | 序列、队列 | 去重、集合运算 | 常量、记录、键 |
六、总结与建议
这四种数据结构是 Python 编程中最基础也是最常用的组件。
- 列表:当你需要有序、可变且允许重复数据的序列时使用。
- 字典:当你需要通过特定标识(键)快速查找对应值时使用。
- 集合:当你需要去重或进行数学集合运算时使用。
- 元组:当你需要不可变的数据结构,或希望作为字典的键时使用。
在实际开发中,根据数据特性和操作需求选择合适的结构,能显著提升程序的性能和可读性。建议多在实际项目中练习,体会不同数据结构带来的行为差异。
相关免费在线工具
- 加密/解密文本
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
- curl 转代码
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
- Markdown转HTML
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
- HTML转Markdown
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online