python的各种推导式(列表推导式、字典推导式、集合推导式)
推导式 comprehensions(又称解析式),是 python 的一种独有特性。推导式是可以从一个数据序列构建另一个新的数据序列。
1.列表推导式
语法:
- 变量名 = [表达式 for 变量 in 列表 for 变量 in xxx]
- 变量名 = [表达式 for 变量 in 列表 if 条件]
语义:
- 遍历出列表中的内容给变量,表达式根据变量值进行逻辑运算。或者遍历列表中的内容给变量,然后进行判断,符合的值在给表达式。
练习1:快速创建一个包含元素1-10的列表
list1 = [i for i in range(1, 11)] print(list1) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
练习2:快速创建一个包含1-10之间所有偶数的列表
list1 = [i for i in range(1, 11) if i % 2 == 0] print(list1) # [2, 4, 6, 8, 10]
练习3:现在有一列表 lst = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] ,求出 1/4/7 和 1/5/9元素,思考如何取出
lst = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] list1 = [lst[i][0] for i in range(len(lst))] print(list1) # [1, 4, 7] list2 = [lst[i][i] for i in range(len(lst))] print(list2) # [1, 5, 9]
2.字典推导式
- 字典推导式列表推导式思想的延续,语法差不多,只不过产生的是字典而已。
练习1:大小写key合并
mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3} mcase_frequency = { k.lower(): mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0) for k in mcase.keys() if k.lower() in ['a','b'] } print(mcase_frequency) # {'a': 17, 'b': 34}
练习2:快速更换key和value
mcase = {'a': 10, 'b': 34} mcase_frequency = {v: k for k, v in mcase.items()} print(mcase_frequency) # {10: 'a', 34: 'b'}
3集合推导式
- 集合推导式跟列表推导式非常相似,唯一区别在于用 { } 代替 [ ]
练习1:
squared = {x**2 for x in [1, 1, 2]} print(squared) # {1, 4} 集合去重复