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

23 python 数据容器推导式

在办公室里,一群牛马经常需要批量处理任务:

  • 从员工名单中筛选符合条件的候选人
  • 把 Excel 表格数据转换成字典格式
  • 自动生成会议纪要的结构化数据

一、推导式定义

Python 推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体。

Python 推导式就像职场中的 "批量处理神器",能在一行代码内完成数据转换和筛选

Python 支持各种数据结构的推导式:

  • 列表(list)推导式
  • 字典(dict)推导式
  • 集合(set)推导式
  • 元组(tuple)推导式

其基本格式都为表达式 for 变量 in 数据容器 if 条件

二、列表推导式

语法:[表达式 for 变量 in 列表]
或:[表达式 for 变量 in 列表 if 条件]

场景:从候选人名单中筛选出符合条件的面试者

# 传统循环写法
candidates = ['张三', '李四喜', '王五佰', '赵六']
qualified = []
for name in candidates:if len(name) >= 3:  # 假设名字长度达标qualified.append(name)  # 统一到一起
print(qualified)# 推导式写法
qualified = [name for name in candidates if len(name) >= 3]
print(qualified)
# ['李四喜', '王五佰']
# ['李四喜', '王五佰']

对比:推导式将 4 行代码浓缩为 1 行,且执行效率更高。

可以手动试试统计一下分别执行了多长时间

 三、字典推导式

语法:{ key_expr: value_expr for value in collection }
或:  { key_expr: value_expr for value in collection if condition }

场景:将 Excel 中的员工编号和姓名转换为字典

# 传统写法
id_list = [1001, 1002, 1003]
name_list = ['豆包', '小明', '小红']
emp_dict = {}
for i in range(len(id_list)):emp_dict[id_list[i]] = name_list[i]
print(emp_dict)# 推导式写法
emp_dict = {id: name for id, name in zip(id_list, name_list)}
print(emp_dict)
# {1001: '豆包', 1002: '小明', 1003: '小红'}
# {1001: '豆包', 1002: '小明', 1003: '小红'}

优势:直接将两个列表合并为字典,代码量减少 50%。

四、集合推导式

语法:{ expression for item in Sequence }
{ expression for item in Sequence if conditional }

场景:从招聘数据中提取所有不重复的岗位

# 传统写法
positions = ['Python开发', '测试工程师', 'Python开发', '产品经理']
unique_positions = set()
for pos in positions:unique_positions.add(pos.split(' ')[0])  # 提取岗位名称# 推导式写法
unique_positions = {pos.split(' ')[0] for pos in positions}

效果:自动去重并提取核心岗位名称。

五、元组推导式

语法:(expression for item in Sequence )
或:(expression for item in Sequence if conditional )

场景:生成包含日期和工作量的周报元组

# 传统写法
weekly_data = []
for day in range(1, 6):workload = day * 2  # 假设每天工作量递增weekly_data.append((f"第{day}天", workload))# 推导式写法
weekly_data = ((f"第{day}天", day * 2) for day in range(1, 6))
print(weekly_data)
# 元组推导式返回的结果是一个生成器对象。
# <generator object <genexpr> at 0x0000024109E9A9B0># 使用 tuple() 函数,可以直接将生成器对象转换成元组
print(tuple(weekly_data))
# (('第1天', 2), ('第2天', 4), ('第3天', 6), ('第4天', 8), ('第5天', 10))

注意,元组推导式返回的结果是一个生成器对象,可以使用tuple() 函数,将生成器对象转换成元组

六、注意事项

  1. 避免过度复杂:超过 2 层嵌套的推导式可读性下降,改用函数封装
  2. 性能考量:处理 10 万条以上数据时,优先使用生成器推导式
  3. 错误处理:添加 try...except 避免因数据格式问题导致程序崩溃
# 安全写法示例
raw_data = ['  apple  ', 123, '  banana', None, 'cherry  ']
def validate_name(name):try:return isinstance(name, str) and len(name.strip()) >= 2except:return Falsecleaned_names = [name.strip() for name in raw_data if validate_name(name)]
print(cleaned_names)


    http://www.mrgr.cn/news/96599.html

    相关文章:

  1. 【学Rust写CAD】21 2D 点(point.rs)
  2. Verilog HDL 100道面试题及参考答案
  3. [7-02-02].第03节:生产经验 - Broker节点服役和退役
  4. Nyquist插件基础:打印格式化字符串(LISP语言)
  5. python代码实现离散haar小波变换和db4小波变换
  6. kubernetes》》k8s》》 kubeadm、kubectl、kubelet 重启pod
  7. SkyWalking+Springboot实战
  8. 2025国内DevOps新手突围指南:从Gitee零门槛入门到工具链深度对比
  9. 虫洞数观系列二 | Python+MySQL高效封装:为pandas数据分析铺路
  10. 分布式计算Ray框架面试题及参考答案
  11. Mac Apple silicon如何指定运行amd64架构的ubuntu Docker?
  12. 一个判断A股交易状态的python脚本
  13. USB有驱ID卡读卡器C#小程序开发
  14. 哈希表 - 两数之和(Map) - JS
  15. 【Kubernetes】CentOS 7 安装 Kubernetes 1.30.1
  16. HCIA-数据通信datacom认证
  17. Qt使用QGraphicsView绘制线路图————附带详细实现代码
  18. 【零基础入门unity游戏开发——2D篇】SpriteRenderer精灵渲染器组件
  19. UGNX二次开发——截图功能
  20. 蓝桥杯专项复习——二分