python基础入门:3.3序列通用操作
Python序列操作终极指南:解锁数据处理的核心技能
# 快速导航
sequence_types = ["列表", "元组", "字符串", "字节序列"]
一、核心操作三位一体
1. 索引与切片体系
# 通用索引规则
data = ["A", "B", "C", "D", "E"]
print(data[2]) # 正向索引 → C
print(data[-3]) # 反向索引 → C
# 高级切片技巧
text = "Python"
print(text[1:4]) # 基础切片 → yth
print(text[::2]) # 步长切片 → Pto
print(text[::-1]) # 反转序列 → nohtyP
# 多维切片应用
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
print(matrix[1:3][0][1:]) # 获取[5,6]和[8,9] → [5,6]
切片参数解析表:
参数 | 说明 | 示例 | 结果 |
---|---|---|---|
start | 起始位置(包含) | [2:] | 从索引2开始 |
end | 结束位置(不包含) | [:4] | 到索引3结束 |
step | 步长(可负) | [::-2] | 反向步进 |
2. 迭代的统一法则
# 通用迭代协议
for char in "Hello": # 字符串迭代
print(char, end=" ") # H e l l o
# 反向迭代技巧
numbers = (10, 20, 30, 40)
for num in reversed(numbers):
print(num) # 40 30 20 10
# 自定义可迭代对象
class CountDown:
def __init__(self, start):
self.start = start
def __iter__(self):
return (x for x in range(self.start, -1, -1))
for num in CountDown(5):
print(num) # 5 4 3 2 1 0
二、内置函数威力全开
1. 基础函数应用
# 长度检测
mixed = [True, None, 3.14, "text"]
print(len(mixed)) # 4
# 极值运算
temperatures = [-5, 12, 8, 21, -3]
print(max(temperatures)) # 21
print(min(temperatures)) # -5
# 空值处理
empty = []
print(sum(empty, start=0)) # 0
2. 进阶统计技巧
# 复合数据类型处理
grades = [
{"name": "Alice", "score": 88},
{"name": "Bob", "score": 92},
{"name": "Charlie", "score": 85}
]
# 获取最高分记录
best = max(grades, key=lambda x: x["score"])
print(f"最高分:{best['name']} {best['score']}分")
# 自定义比较函数
words = ["apple", "banana", "cherry"]
longest = max(words, key=len) # banana
函数性能对比:
操作 | 时间复杂度 | 适用场景 |
---|---|---|
len() | O(1) | 所有序列类型 |
max/min() | O(n) | 可比较元素的序列 |
sum() | O(n) | 数值型序列 |
三、迭代神器深度解析
1. enumerate实战
# 基础用法
colors = ["red", "green", "blue"]
for index, color in enumerate(colors, start=1):
print(f"第{index}个颜色是{color}")
# 创建字典映射
position_map = {item: idx for idx, item in enumerate("ABCDE", 1)}
# {'A':1, 'B':2, ...}
# 并行修改列表
data = [10, 20, 30]
for i, val in enumerate(data):
data[i] = val * 2 # [20,40,60]
2. zip魔法应用
# 基础合并
names = ["Alice", "Bob"]
scores = [88, 92]
combined = list(zip(names, scores)) # [('Alice',88), ('Bob',92)]
# 矩阵转置
matrix = [[1,2], [3,4], [5,6]]
transposed = list(zip(*matrix)) # [(1,3,5), (2,4,6)]
# 不等长序列处理
from itertools import zip_longest
nums = [1,2,3]
letters = ['a','b']
print(list(zip_longest(nums, letters, fillvalue='-')))
# [(1,'a'), (2,'b'), (3,'-')]
迭代工具对比表:
特性 | enumerate | zip |
---|---|---|
主要功能 | 添加索引计数器 | 并行迭代多个序列 |
典型应用场景 | 需要索引的循环 | 合并关联数据 |
优势 | 避免手动维护索引 | 简化多序列处理 |
四、性能优化与最佳实践
1. 内存管理技巧
# 切片的内存特性
original = [1,2,3,4]
sliced = original[1:3] # 创建新列表[2,3]
original[1] = 99
print(sliced) # 仍为[2,3]
# 生成器表达式优化
big_data = (x**2 for x in range(1000000)) # 内存友好
2. 类型选择策略
# 不同序列类型对比
from sys import getsizeof
data_list = [1,2,3]
data_tuple = (1,2,3)
data_str = "123"
print(f"列表内存:{getsizeof(data_list)}字节")
print(f"元组内存:{getsizeof(data_tuple)}字节")
print(f"字符串内存:{getsizeof(data_str)}字节")
序列类型选择指南:
- 需要修改 → 列表
- 只读数据 → 元组
- 文本处理 → 字符串
- 二进制数据 → bytes
扩展思考:
- 如何实现自定义序列类型(实现
__getitem__
和__len__
) - 切片操作在Pandas DataFrame中的扩展应用
- 使用itertools模块处理复杂迭代逻辑
- 生成器表达式与列表推导式的性能差异
下节预告:迭代器协议与生成器原理——掌握Python的惰性计算艺术