在 Python 编程中,数据结构是组织和存储数据的重要方式,合理选择和使用数据结构能显著提升程序的效率和可读性。这篇博客通过丰富的代码示例深入学习 Python3 的数据结构知识,方便日后复习回顾。
一、列表(List)
1.1 列表的特性与常用方法
列表是 Python 中常用且灵活的数据结构,它的元素可变,这使其区别于字符串和元组。以下是一些列表常用方法的示例:
python
my_list = [1, 2, 3, 3, 4]
# append方法:在列表末尾添加元素
my_list.append(5)
print(my_list)
# extend方法:添加另一个列表的所有元素
my_list.extend([6, 7])
print(my_list)
# insert方法:在指定位置插入元素
my_list.insert(2, 2.5)
print(my_list)
# remove方法:删除指定值的第一个元素
my_list.remove(3)
print(my_list)
# pop方法:移除并返回指定位置的元素,默认是最后一个
popped_item = my_list.pop()
print(popped_item)
print(my_list)
# clear方法:清空列表
my_list.clear()
print(my_list)
1.2 将列表当作栈使用
栈是一种后进先出(LIFO)的数据结构,Python 列表可方便地实现栈操作。示例如下:
python
stack = []
# 压入元素
stack.append(10)
stack.append(20)
stack.append(30)
print(stack)
# 弹出元素
popped = stack.pop()
print(popped)
print(stack)
# 查看栈顶元素
top = stack[-1]
print(top)
# 检查栈是否为空
is_empty = len(stack) == 0
print(is_empty)
# 获取栈的大小
size = len(stack)
print(size)
1.3 将列表当作队列使用
队列是先进先出(FIFO)的数据结构,虽然列表可实现队列功能,但频繁在开头操作效率较低。collections.deque
是更优选择,示例如下:
python
from collections import deque
# 使用deque实现队列
queue = deque()
queue.append('a')
queue.append('b')
queue.append('c')
print(queue)
first = queue.popleft()
print(first)
print(queue)
front = queue[0]
print(front)
is_empty = len(queue) == 0
print(is_empty)
size = len(queue)
print(size)
如果坚持使用列表实现队列:
python
list_queue = []
list_queue.append('x')
list_queue.append('y')
list_queue.append('z')
print(list_queue)
removed = list_queue.pop(0)
print(removed)
print(list_queue)
1.4 列表推导式
列表推导式是创建列表的简洁方式。例如:
python
nums = [1, 2, 3, 4]
# 对列表元素进行运算生成新列表
squared_nums = [num ** 2 for num in nums]
print(squared_nums)
# 使用if子句过滤元素
even_squared_nums = [num ** 2 for num in nums if num % 2 == 0]
print(even_squared_nums)
1.5 嵌套列表解析
处理嵌套列表时,列表解析可用于转换矩阵等操作。例如,将 3X4 的矩阵转置:
python
matrix = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]
]
transposed = [[row[i] for row in matrix] for i in range(4)]
print(transposed)
1.6 del 语句
del
语句可根据索引删除列表元素或切片,还能删除整个列表。例如:
python
my_list = [10, 20, 30, 40, 50]
del my_list[2]
print(my_list)
del my_list[1:3]
print(my_list)
del my_list
二、元组(Tuple)
元组由逗号分隔的值组成,元素不可变。例如:
python
my_tuple = (1, 'hello', 3.14)
print(my_tuple[0])
# 尝试修改元组元素会报错
# my_tuple[0] = 2
元组也支持嵌套:
python
nested_tuple = ((1, 2), (3, 4))
print(nested_tuple[1][0])
三、集合(Set)
集合是无序且不重复元素的集合,可用于关系测试和去重。示例如下:
python
my_set = {1, 2, 2, 3, 4}
print(my_set)
# 成员检测
print(3 in my_set)
# 集合运算
set_a = {1, 2, 3}
set_b = {3, 4, 5}
print(set_a - set_b)
print(set_a | set_b)
print(set_a & set_b)
print(set_a ^ set_b)
# 集合推导式
new_set = {num for num in range(1, 6) if num % 2 == 0}
print(new_set)
四、字典(Dictionary)
字典以键值对存储数据,键必须是不可变类型。示例如下:
python
my_dict = {'name': 'Alice', 'age': 30}
# 添加或修改键值对
my_dict['city'] = 'New York'
print(my_dict)
# 获取值
print(my_dict['name'])
# 删除键值对
del my_dict['age']
print(my_dict)
# 遍历字典
for key, value in my_dict.items():
print(key, value)
字典推导式可用于创建字典:
python
new_dict = {num: num ** 2 for num in range(1, 4)}
print(new_dict)
五、遍历技巧
5.1 字典遍历
使用items()
方法可同时获取字典的键和值:
python
my_dict = {'one': 1, 'two': 2, 'three': 3}
for key, value in my_dict.items():
print(key, value)
5.2 序列遍历
enumerate()
函数可同时获取序列的索引和值:
python
my_list = ['apple', 'banana', 'cherry']
for index, item in enumerate(my_list):
print(index, item)
5.3 多序列遍历
zip()
函数可同时遍历多个序列:
python
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
for num, char in zip(list1, list2):
print(num, char)
5.4 反向与排序遍历
reversed()
函数用于反向遍历序列,sorted()
函数用于排序遍历:
python
my_list = [5, 3, 1, 4, 2]
for num in reversed(my_list):
print(num)
for num in sorted(my_list):
print(num)
六、总结
Python3 提供了丰富的数据结构,每种都有其独特的特性和适用场景。列表灵活可变,适用于需要频繁修改数据的场景;元组不可变,适合存储固定数据;集合用于去重和关系测试;字典以键值对存储,便于快速查找。掌握这些数据结构及其操作方法,以及各种遍历技巧,能帮助我们编写出更高效、简洁的 Python 代码。在实际编程中,应根据具体需求选择合适的数据结构,充分发挥它们的优势。希望这篇博客能帮助你系统复习 Python3 的数据结构知识,在编程实践中灵活运用。