提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
Python 中的推导式(comprehension)是一种构建列表(list)、集合(set)、字典(dict)或其他迭代器的高效简洁的方式。它允许你从一个迭代器快速生成一个新的迭代器,通过简洁的语法实现循环和条件判断。推导式主要分为列表推导式(list comprehension)、字典推导式(dictionary comprehension)、集合推导式(set comprehension)和生成器表达式(generator expression,虽然它不是一个完整的迭代器,但通常在讨论推导式时也会被提及)。
列表推导式(List Comprehension)
列表推导式提供了一种从其他列表创建列表的简洁方式。
# 示例:将列表中的每个数字乘以2
numbers = [1, 2, 3, 4, 5]
squared = [x*2 for x in numbers]
print(squared) # 输出: [2, 4, 6, 8, 10]
# 添加条件判断
even_squared = [x*2 for x in numbers if x % 2 == 0]
print(even_squared) # 输出: [4, 8, 10]
字典推导式(Dictionary Comprehension)
字典推导式用于从现有字典或其他可迭代对象创建新字典。
# 示例:将字典的键和值互换
d = {'a': 1, 'b': 2, 'c': 3}
d_inverted = {v: k for k, v in d.items()}
print(d_inverted) # 输出: {1: 'a', 2: 'b', 3: 'c'}
# 使用条件判断
d_filtered = {k: v for k, v in d.items() if v > 1}
print(d_filtered) # 输出: {'b': 2, 'c': 3}
集合推导式(Set Comprehension)
集合推导式用于从其他集合或可迭代对象创建新集合。集合是无序的,且不允许重复元素。
# 示例:从列表中获取所有偶数
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = {x for x in numbers if x % 2 == 0}
print(even_numbers) # 输出可能是 {2, 4, 6},因为集合是无序的
生成器表达式(Generator Expression)
生成器表达式类似于列表推导式,但它返回一个生成器对象,而不是一次性生成整个列表。这在处理大量数据时非常有用,因为它可以节省内存。
# 示例:生成偶数
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = (x for x in numbers if x % 2 == 0)
# 使用生成器
for num in even_numbers:
print(num) # 输出: 2 4 6
总结
推导式是 Python 中的一个非常强大且常用的特性,可以极大地简化代码并提高代码的可读性。