一、列表推导式
列表推导式是Python中最常见的推导式,它允许我们快速构建一个列表,而不必写循环语句。
nums = [1, 2, 3, 4, 5]
squares = [num ** 2 for num in nums]
print(squares) # [1, 4, 9, 16, 25]
这段代码使用列表推导式构建了一个包含数值1~5的整数列表,并使用循环语句求出每个数的平方。这种方法比使用循环语句构建列表更为简洁。
除了基本语法,列表推导式还支持嵌套循环和条件筛选,如下所示:
words = ['hello', 'world', 'python', 'is', 'fun']
capitalized_words = [word.upper() for word in words if len(word) > 4]
print(capitalized_words) # ['WORLD', 'PYTHON']
这段代码使用列表推导式筛选出长度大于4的单词,并将它们转换成大写字母。
二、字典推导式
字典推导式类似于列表推导式,但是它用于创建字典。它的基本语法如下:
d = {key_expression: value_expression for expression in iterable}
通过字典推导式,我们可以快速创建一个字典。例如:
numbers = [1, 2, 3, 4, 5]
squares_dict = {num: num ** 2 for num in numbers}
print(squares_dict) # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
这段代码使用字典推导式创建了一个由数字和它们的平方组成的字典。
三、集合推导式
集合推导式类似于列表推导式和字典推导式,但是它用于创建集合。它的基本语法如下:
s = {expression for expression in iterable}
集合推导式可以用于快速创建一个集合。例如:
numbers = [1, 2, 3, 4, 5, 1, 2, 3]
squares_set = {num ** 2 for num in numbers}
print(squares_set) # {1, 4, 9, 16, 25}
这段代码使用集合推导式创建了一个由数字的平方组成的集合,注意,集合中只包含了唯一的元素。
四、生成器推导式
生成器是Python中一种非常重要的数据类型,它可以边循环边计算值,而不必等到所有的值都计算出来。
Python中的生成器推导式与列表推导式类似,但是它返回的是一个生成器对象。例如:
numbers = [1, 2, 3, 4, 5]
squares_generator = (num ** 2 for num in numbers)
print(squares_generator) # <generator object <genexpr> at 0x10c1cbeb8>
这段代码使用生成器推导式创建了一个生成器对象,它可以用于逐个计算每个数字的平方。如果要取出生成器中的所有元素,可以将它转换为列表或者使用for循环逐个取出元素。
print(list(squares_generator)) # [1, 4, 9, 16, 25]
注意:当将生成器转换为列表时,生成器对象的全部元素都会被计算并存储在列表中。
五、总结
推导式是Python中一种非常方便的语法,它允许我们使用简洁的语法构建列表、字典、集合和生成器。使用推导式可以让我们的代码更加简洁、清晰、高效。