在 Python 编程的世界里,数据结构是基石,掌握不同的数据结构能让你更高效地处理和组织数据。本文将带你深入探索 Python 中常见的数据结构,从列表、元组,到集合、字典,为你呈现全面且实用的知识。
一、列表:灵活多变的数据容器
- 丰富的列表方法:列表拥有众多实用方法。
append(x)
用于在列表末尾添加元素,extend(iterable)
可将可迭代对象中的元素添加到列表,insert(i, x)
能在指定位置插入元素 。remove(x)
删除列表中第一个值为x
的元素,若未找到会触发ValueError
异常;pop([i])
移除并返回指定位置的元素,默认移除最后一个元素,列表为空或索引越界时引发IndexError
。clear()
清空列表,index(x[, start[, end]])
返回指定元素的索引,count(x)
统计元素出现次数,sort(*, key=None, reverse=False)
就地排序,reverse()
翻转列表,copy()
返回浅拷贝。 - 特殊应用:堆栈和队列:列表可轻松实现堆栈,利用
append()
添加元素,pop()
取出元素,遵循 “后进先出” 原则。用作队列时虽可行,但效率较低,因为在列表开头插入或移除元素速度慢,此时collections.deque
是更好的选择,它能快速从两端操作元素。 - 列表推导式:简洁的列表创建方式:列表推导式让创建列表更简洁高效。例如,计算平方值列表可以用
[x**2 for x in range(10)]
,还能结合if
子句进行条件筛选,像[x for x in range(10) if x % 2 == 0]
可筛选出偶数。多个for
子句能实现嵌套循环效果,如[(x, y) for x in range(3) for y in range(3)]
。 - 嵌套列表推导式:列表推导式的初始表达式可以是另一个列表推导式。例如,对 3x4 矩阵进行转置,可以使用
[[row[i] for row in matrix] for i in range(4)]
,不过zip()
函数在这种场景下更便捷。
二、del
语句:灵活删除数据:
del
语句可按索引删除列表中的元素,如del a[0]
;删除切片del a[2:4]
;还能清空列表del a[:]
。此外,del
也可用于删除整个变量,删除后再引用会报错。
三、元组:不可变的序列:
元组由逗号分隔的值组成,如t = 12345, 54321, 'hello!'
。元组是不可变的,不能修改单个元素的值,但可以包含可变对象。创建空元组用()
,创建单元素元组需在元素后加逗号。元组打包是将多个值组合成元组,序列解包则是将元组的值分别赋给多个变量。
四、集合:无序且不重复的容器:
集合是由不重复元素组成的无序容器。创建集合可以用花括号{}
或set()
函数,创建空集合只能用set()
。集合支持成员检测、消除重复元素,还能进行合集、交集、差集、对称差分等数学运算,也有集合推导式,如{x for x in 'abracadabra' if x not in 'abc'}
。
五、字典:键值对的集合
1. 字典的基本操作:字典以键索引,键必须是不可变类型。可以用花括号{}
创建字典,也能用dict()
构造函数或字典推导式创建。通过键存储和提取值,用del
删除键值对。循环字典时,items()
方法可同时获取键和值。
2. 字典推导式详解:字典推导式是一种强大且简洁的创建字典的方式,它允许你使用紧凑的语法从现有数据构建字典。其基本语法为{键表达式: 值表达式 for 变量 in 可迭代对象 [if 条件表达式]}
,其中中括号内的条件表达式是可选的。
- 简单的字典推导式示例:如果要创建一个字典,键是数字,值是该数字的平方,可以这样写
{x: x**2 for x in range(1, 6)}
,得到的字典为{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
。这里x
是迭代变量,x
作为键,x**2
作为对应的值,range(1, 6)
是可迭代对象。 - 结合条件的字典推导式:假设你有一个列表
numbers = [1, 2, 3, 4, 5, 6]
,现在只想创建一个字典,键是偶数,值是该偶数的平方,就可以使用带条件的字典推导式{x: x**2 for x in numbers if x % 2 == 0}
,结果是{2: 4, 4: 16, 6: 36}
。条件if x % 2 == 0
用于筛选出符合条件的元素进行字典创建。 - 更复杂的字典推导式:字典推导式还可以结合函数和复杂表达式。比如,有两个列表
keys = ['a', 'b', 'c']
和values = [1, 2, 3]
,要创建一个字典,键来自keys
列表,值是对应values
列表元素的立方,可以写成{k: v**3 for k, v in zip(keys, values)}
,得到{'a': 1, 'b': 8, 'c': 27}
。这里使用zip()
函数将两个列表的元素一一对应,然后通过字典推导式创建字典。
六、循环的技巧:
在 Python 中,循环操作配合不同数据结构有许多实用技巧。对字典循环时,items()
方法能同时提取键值对;循环序列时,enumerate()
函数可获取索引和对应值;同时循环多个序列,zip()
函数将元素一一匹配;reversed()
函数用于逆向循环,sorted()
函数可按指定顺序循环,还可结合set()
去除重复元素。