当前位置: 首页 > article >正文

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,'-')]

迭代工具对比表

特性enumeratezip
主要功能添加索引计数器并行迭代多个序列
典型应用场景需要索引的循环合并关联数据
优势避免手动维护索引简化多序列处理

四、性能优化与最佳实践

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)}字节")

序列类型选择指南

  1. 需要修改 → 列表
  2. 只读数据 → 元组
  3. 文本处理 → 字符串
  4. 二进制数据 → bytes

扩展思考

  • 如何实现自定义序列类型(实现__getitem____len__
  • 切片操作在Pandas DataFrame中的扩展应用
  • 使用itertools模块处理复杂迭代逻辑
  • 生成器表达式与列表推导式的性能差异

下节预告:迭代器协议与生成器原理——掌握Python的惰性计算艺术


http://www.kler.cn/a/537649.html

相关文章:

  • 如何通过 ESPN API 获取 NBA 球队的赛程表
  • 常用数据结构之String字符串
  • 【Kubernetes Pod间通信-第1篇】在单个子网中使用underlay网络实现Pod到Pod的通信
  • pytest-xdist 进行多进程并发测试!
  • 从 .NET Framework 升级到 .NET 8 后 SignalR 问题处理与解决方案
  • 私有化部署DeepSeek并SpringBoot集成使用(附UI界面使用教程-支持语音、图片)
  • SpringBoot中的多环境配置管理
  • 从Oracle 到帆软BI:打造高效数据可视化仪表盘
  • 人工智能A*-启发式函数、增量式 A* 算法
  • 余数相同问题(信息学奥赛一本通-1080)
  • 从基础到进阶,掌握 CSS 变量与calc()函数的完整指南
  • Deepseek部署的模型参数要求
  • 内核日志查看:dmesg命令
  • CSS 布局全面解析:从传统浮动到现代 Flexbox 和 Grid
  • harmonyOS生命周期详述
  • android skia渲染介绍
  • Arduino 型号的对比
  • 微信小程序如何使用decimal计算金额
  • STM32G474--Whetstone程序移植(单精度)笔记
  • TypeScript 中的对象类型:深入理解接口和类型别名
  • SpringBoot速成(六)自定义starter
  • 企业4个内外网数据摆渡问题需要注意
  • Kafka系列之:定位topic只能保存最新数据的原因
  • 全国计算机等级考试(NCRE)四级计算机网络考试大纲(2025年版)
  • Vite 为什么快,是怎么打包的
  • C# OpenCV机器视觉:智能水果采摘