Python(14)推导式
在 Python 编程中,推导式是一种强大而简洁的语法结构,它能让开发者以简洁的方式从一个数据序列创建另一个新的数据序列。无论是处理列表、字典、集合还是元组,推导式都能大显身手。这篇博客将结合菜鸟教程中的内容,通过丰富的代码示例,深入学习 Python3 推导式,方便日后复习回顾。
一、列表推导式
列表推导式是最常见的推导式之一,它的基本格式有两种:
[表达式 for 变量 in 列表]
[表达式 for 变量 in 列表 if 条件]
1.1 基础应用:生成新列表
通过对已有列表元素进行简单运算来生成新列表。例如,将一个包含数字的列表中每个元素都乘以 2:
nums = [1, 2, 3, 4, 5]
new_nums = [num * 2 for num in nums]
print(new_nums)
在这段代码中,num * 2
是表达式,num
是变量,nums
是原列表。for num in nums
表示对nums
中的每个元素进行迭代,将每个元素num
代入表达式num * 2
,并将结果存储在新列表new_nums
中。
1.2 条件筛选:过滤列表元素
使用条件语句筛选符合特定条件的元素。比如,从一个列表中筛选出所有偶数:
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_nums = [num for num in nums if num % 2 == 0]
print(even_nums)
这里if num % 2 == 0
是条件语句,只有满足该条件(即num
是偶数)的元素才会被添加到新列表even_nums
中。
1.3 结合函数:灵活处理列表元素
表达式可以是有返回值的函数。例如,定义一个函数将字符串首字母大写,然后对列表中的字符串元素进行处理:
def capitalize_str(s):return s.capitalize()words = ['python', 'java', 'c++']
new_words = [capitalize_str(word) for word in words]
print(new_words)
在这个例子中,capitalize_str(word)
作为表达式,对words
列表中的每个字符串元素进行处理,生成新的列表new_words
。
二、字典推导式
字典推导式用于创建字典,基本格式同样有两种:
{ key_expr: value_expr for value in collection }
{ key_expr: value_expr for value in collection if condition }
2.1 基础应用:创建键值对字典
以列表元素为键,元素的某个属性为值创建字典。例如,根据一个包含水果名称的列表,创建一个以水果名称为键,水果名称长度为值的字典:
fruits = ['apple', 'banana', 'cherry']
fruit_dict = {fruit: len(fruit) for fruit in fruits}
print(fruit_dict)
在这段代码中,fruit
是键表达式,len(fruit)
是值表达式,fruits
是集合。通过遍历fruits
列表,将每个水果名称作为键,其长度作为值,创建了字典fruit_dict
。
2.2 条件筛选:根据条件创建字典
使用条件筛选符合要求的元素来创建字典。比如,从一个包含数字的列表中,创建一个以偶数为键,偶数平方为值的字典:
nums = [1, 2, 3, 4, 5, 6]
even_square_dict = {num: num ** 2 for num in nums if num % 2 == 0}
print(even_square_dict)
这里if num % 2 == 0
是条件语句,只有满足条件的偶数num
才会被用于创建字典的键值对,其值为该偶数的平方。
三、集合推导式
集合推导式用于创建集合,基本格式为:
{ expression for item in Sequence }
{ expression for item in Sequence if conditional }
3.1 基础应用:生成集合
对一个可迭代对象中的元素进行运算,生成一个集合。例如,计算一个列表中每个元素的平方,生成一个平方数集合:
nums = [1, 2, 3, 4, 5]
square_set = {num ** 2 for num in nums}
print(square_set)
在这段代码中,num ** 2
是表达式,num
是变量,nums
是序列。通过对nums
中的每个元素进行平方运算,将结果存储在集合square_set
中。由于集合的元素唯一性,重复的平方数只会出现一次。
3.2 条件筛选:筛选集合元素
根据条件筛选可迭代对象中的元素,生成符合条件的集合。比如,从一个字符串中筛选出不是元音字母的字符集合:
s = 'hello world'
non_vowel_set = {char for char in s if char not in 'aeiou'}
print(non_vowel_set)
这里if char not in 'aeiou'
是条件语句,只有满足该条件(即字符不是元音字母)的字符才会被添加到集合non_vowel_set
中。
四、元组推导式(生成器表达式)
元组推导式(严格来说是生成器表达式)的基本格式为:
(expression for item in Sequence )
(expression for item in Sequence if conditional )
它与列表推导式类似,但返回的是一个生成器对象。如果需要得到元组,可以使用tuple()
函数进行转换。
4.1 基础应用:生成生成器对象
创建一个生成器对象,用于生成一系列数据。例如,生成 1 到 10 的整数的立方的生成器:
cube_generator = (num ** 3 for num in range(1, 11))
print(cube_generator)
这里num ** 3
是表达式,num
是变量,range(1, 11)
是序列。运行代码后,会输出一个生成器对象。如果需要获取生成器中的数据,可以使用循环遍历或转换为元组等方式。
4.2 转换为元组:获取最终元组数据
将生成器对象转换为元组。例如,将上述生成器对象转换为元组:
cube_tuple = tuple(cube_generator)
print(cube_tuple)
运行代码后,cube_tuple
就是包含 1 到 10 的整数的立方的元组。
五、总结
Python3 推导式是一种高效、简洁的数据处理工具,能够帮助开发者快速创建和处理列表、字典、集合和元组。通过合理运用推导式,可以减少代码量,提高代码的可读性和执行效率。在实际编程中,要根据具体需求选择合适的推导式,并注意保持代码的简洁性和可读性。希望这篇博客能帮助你更好地复习和巩固 Python3 推导式的知识,在编程中灵活运用推导式解决各种问题。