Python数据结构精讲教程-专家级(附示例代码)
目录
线性数据结构
列表(List)
列表是Python中最常用的可变序列,可以存储任意类型的元素。
特点:
- 有序集合
- 可变(可修改)
- 可包含不同类型元素
- 支持索引和切片
案例1:基本操作
# 创建列表
numbers = [1, 2, 3, 4, 5]
fruits = ['apple', 'banana', 'cherry']
mixed = [1, 'hello', 3.14, True]
# 访问元素
print(numbers[0]) # 输出: 1
print(fruits[-1]) # 输出: 'cherry'
# 修改元素
numbers[2] = 30
print(numbers) # 输出: [1, 2, 30, 4, 5]
# 切片操作
print(numbers[1:4]) # 输出: [2, 30, 4]
案例2:列表方法
# 添加元素
fruits.append('orange')
print(fruits) # ['apple', 'banana', 'cherry', 'orange']
# 插入元素
fruits.insert(1, 'grape')
print(fruits) # ['apple', 'grape', 'banana', 'cherry', 'orange']
# 移除元素
fruits.remove('banana')
print(fruits) # ['apple', 'grape', 'cherry', 'orange']
# 排序
numbers = [3, 1, 4, 1, 5, 9, 2]
numbers.sort()
print(numbers) # [1, 1, 2, 3, 4, 5, 9]
# 列表推导式
squares = [x**2 for x in range(10)]
print(squares) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
案例3:多维列表
# 创建二维列表(矩阵)
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# 访问元素
print(matrix[1][2]) # 输出: 6
# 遍历二维列表
for row in matrix:
for item in row:
print(item, end=' ')
print()
# 输出:
# 1 2 3
# 4 5 6
# 7 8 9
# 列表生成式创建二维列表
matrix = [[i*j for j in range(1, 4)] for i in range(1, 4)]
print(matrix) # [[1, 2, 3], [2, 4, 6], [3, 6, 9]]
元组(Tuple)
元组是不可变的序列,通常用于存储不可修改的数据集合。
特点:
- 有序集合
- 不可变(创建后不能修改)
- 可包含不同类型元素
- 比列表更高效
案例1:基本操作
# 创建元组
coordinates = (10.0, 20.0)
colors = ('red', 'green', 'blue')
single_element = (42,) # 注意逗号,区别于(42)
# 访问元素
print(coordinates[0]) # 10.0
print(colors[-1]) # 'blue'
# 元组解包
x, y = coordinates
print(f"x: {
x}, y: {
y}") # x: 10.0, y: 20.0
# 不可变性尝试(会报错)
# coordinates[0] = 15.0 # TypeError
案例2:元组与列表转换
# 列表转元组
numbers_list = [1, 2, 3]
numbers_tuple = tuple(numbers_list)
print(numbers_tuple) # (1, 2, 3)
# 元组转列表
colors_list = list(colors)
print(colors_list) # ['red', 'green', 'blue']
# 元组作为字典键
locations = {
(35.6895, 139.6917): "Tokyo",
(40.7128, -74.0060): "New York"
}
print(locations[(35.6895, 139.6917)]) # Tokyo
案例3:命名元组
from collections import namedtuple
# 定义命名元组类型
Point = namedtuple('Point', ['x', 'y'])
# 创建命名元组实例
p = Point(11, y=22)
# 访问元素
print(p.x, p.y) # 11 22
print(p[0], p[1]) # 11 22
# 不可变性
# p.x = 33 # AttributeError
# 转换为字典
print(p._asdict()) # {'x': 11, 'y': 22}
字符串(String)
字符串是不可变的字符序列,用于表示文本数据。
特点:
- 不可变序列
- 支持索引和切片
- 丰富的内置方法
- 支持多种编码
案例1:基本操作
# 创建字符串
s1 = 'Hello'
s2 = "World"
s3 = """多行
字符串"""
# 访问字符
print(s1[0]) # 'H'
print(s2[-1]) # 'd'
# 字符串拼接
greeting = s1 + ' ' + s2
print(greeting) # 'Hello World'
# 字符串重复
laugh = 'ha' * 3
print(laugh) # 'hahaha'
# 字符串长度
print(len(s1)) # 5
案例2:字符串方法
# 大小写转换
text = "Python Programming"
print(text.lower()) # 'python programming'
print(text.upper()) # 'PYTHON PROGRAMMING'
print(text.title()) # 'Python Programming'
# 查找和替换
print(text.find('Pro')) # 7
print(text.replace('Python', 'Java')) # 'Java Programming'
# 分割和连接
csv = "apple,banana,cherry"
fruits = csv.split(',')
print(fruits) # ['apple', 'banana', 'cherry']
print('-'.join(fruits)) # 'apple-banana-cherry'
# 格式化
name, age = "Alice", 25
print(f"{
name} is {
age} years old.") # 'Alice is 25 years old.'
print("{0} is {1} years old.".format(name, age)) # 同上
案例3:字符串编码与正则表达式
# 编码与解码
text = "中文"
encoded = text.encode('utf-8')
print(encoded) # b'\xe4\xb8\xad\xe6\x96\x87'
decoded = encoded.decode('utf-8')
print(decoded) # '中文'
# 正则表达式
import re
# 查找所有数字
text = "There are 123 apples and 456 oranges."
numbers = re.findall(r'\d+', text)
print(numbers) # ['123', '456']
# 验证电子邮件格式
def is_valid_email(email):
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
return bool(re.match(pattern, email))
print(is_valid_email("test@example.com")) # True
print(is_valid_email("invalid.email")) # False
非线性数据结构
字典(Dictionary)
字典是键值对的集合,基于哈希表实现,具有极快的查找速度。
特点:
- 无序集合(Python 3.7+保持插入顺序)
- 键必须是不可变类型
- 值可以是任意类型
- 可变(可添加、修改、删除键值对)
案例1:基本操作
# 创建字典
person = {
'name': 'Alice', 'age': 25, 'city': 'New York'}
empty_dict = {
}
dict_from_list = dict([('a', 1), ('b', 2)])
# 访问元素
print(person['name']) # 'Alice'

&spm=1001.2101.3001.5002&articleId=149650076&d=1&t=3&u=47dec1c962d94fe291b677a6ba97d77f)
855

被折叠的 条评论
为什么被折叠?



