Python 推导式:列表推导式、字典推导式和集合推导式
编写更干净、更快的 Python。通过实际示例、过滤条件和嵌套循环掌握列表、字典和集合推导式。
概述
推导式是 Python 最受欢迎的功能之一,它提供了一种简洁且高度可读的语法,用于从现有的可迭代对象创建新的集合(列表、字典和集合)。推导式允许您在单行富有表现力的代码中执行相同的转换、过滤和赋值,而不是编写多行“for”循环和手动附加项目。
列表推导式是最常见的变体,结构为“[可迭代 if 条件中项目的表达式]”。在底层,Python 优化了推导式,以接近 C 的速度运行,通常优于等效的手动“for”循环,因为循环是由底层解释器处理的。它们非常适合快速转换,例如将摄氏温度列表转换为华氏温度,或从用户记录列表中提取特定键。
除了列表之外,Python 还支持字典和集合推导式。使用花括号和键值对定义的字典理解(例如,“{key: value for x in iterable}”)对于反转映射对或解析元数据非常有用。集合推导式通过自动删除重复项来生成唯一的集合。虽然推导式非常强大,但开发人员应该避免使其过于复杂化;如果推导式需要嵌套循环或复杂条件,则传统的“for”循环通常更易于阅读和维护。
代码和执行输出
演示列表转换、条件过滤以及从映射输入创建字典。
comprehensions.py
在编辑器中尝试numbers = [1, 2, 3, 4, 5, 6]
# List comprehension with filter (even squares)
even_squares = [x**2 for x in numbers if x % 2 == 0]
# Set comprehension (unique word lengths)
words = ["python", "java", "ruby", "python"]
word_lengths = {len(w) for w in words}
# Dictionary comprehension (number: square)
square_map = {n: n**2 for n in numbers[:4]}
print(f"Even squares: {even_squares}")
print(f"Unique lengths: {word_lengths}")
print(f"Square mapping: {square_map}")端子输出
Even squares: [4, 16, 36]
Unique lengths: {4, 6}
Square mapping: {1: 1, 2: 4, 3: 9, 4: 16}逐步实施
- 从日志中过滤掉空值或无效数据
- 将 API 有效负载映射到键值数据映射
- 快速将数据库行格式化为简单列表
常见问题解答
理解比普通循环更快吗?
是的,在大多数情况下它们更快,因为迭代是由 Python 解释器中优化的 C 代码处理的。
我应该始终使用推导式吗?
不,代码可读性是 python 的首要任务。如果推导式具有嵌套逻辑或长度超过一两行,则首选传统循环。
相关主题
推荐的 Python 资源
通过相关的交互式教程、备忘单和代码比较来扩展您的知识。