python列表推导式、字典推导式、集合推导式
python列表推导式、字典推导式、集合推导式
推导式(comprehensions,又称解析式)是Python的一种独有特性,推导式是可以从一个数据序列构建另一个新的数据序列的结构体。 共有三种推导,在Python2和3中都有支持。
- 列表推导式
- 字典推导式
- 集合推导式
接下来一个一个给大家演示。
列表推导式
生成list
格式
格式 :变量名 = [输出 for 循环 if判断]
参数:
输出:生成列表元素的表达式,可以是有返回值的函数
循环:普通的for循环
判断:判断条件,在for循环中符合条件才会输出到生成列表中
示例一:输出为表达式
# [0, 10)区间内, 能被2整除的数的平方
my_list = [i ** 2 for i in range(10) if i % 2 is 0]
print(type(my_list)) # 返回值类型是list
print(my_list)
运行结果:
示例二:输出为函数(有返回值)
def fun(x):
return x * 2
if __name__ == '__main__':
# [0, 10)区间内, 能被2整除的数乘以2
my_list = [fun(i) for i in range(10) if i % 2 is 0]
print(type(my_list)) # 返回值类型是list
print(my_list)
运行结果:
生成generator
只需要将列表推导式的[]改成()即可得到生成器。
格式:变量名 = (输出 for 循环 if判断)
参数同上
示例:
# [0, 10)区间内, 能被2整除的数的平方
my_generator = (i ** 2 for i in range(10) if i % 2 is 0)
print(type(my_generator)) # 返回值类型是generator
my_list = list(my_generator)
print(my_list)
运行结果:
字典推导式
字典推导式和列表推导式的格式是类似的,只不过中括号该改成大括号而已。区别就是字典推导式返回值的类型是字典。
示例一:把字典中的key和value对调
my_dict = {'a': 10, 'b': 34, 'c': 27}
my_dict1 = {z: j for j, z in my_dict.items()} # 全部对调
my_dict2 = {z: j for j, z in my_dict.items() if j == "a"} # 加上判断条件
print("type(my_dict1)", type(my_dict1))
print("my_dict1", my_dict1)
print("my_dict2", my_dict2)
示例二:zip转换成字典
zip函数1返回值是zip类型的,可以转换成字典
# zip转换成字典
d = {h: v for h, v in zip(["a", "b", "c"], [4, 5, 6])}
# zip转换成字典,同样也可以加判断条件
d2 = {h: v for h, v in zip(["a", "b", "c"], [4, 5, 6]) if h == "a"}
print(d)
print(d2)
集合推导式
格式
格式 :变量名 = {输出 for 循环 if判断}
与列表推导式的区别
从格式上来看,集合推导式和列表推导式的格式是类似的,但是他们区别比较大的。
集合推导式与列表推导式的区别:
- 不使用中括号,使用大括号
- 返回值类型是一个set(集合)
- 结果中无重复元素
示例:
# 将列表中的每一个元素平方
my_squared = {x ** 2 for x in [1, 1, 2, 2, 3]}
print(type(my_squared))
print(my_squared)
运行结果: