python 3.x 列表推导式
列表推导式
- 遵循pythonic的写法
- 如果一个序列你想让部分元素执行一系列的操作,此时就不能使用map来完成,而是使用列表推导式.
举例 :
a = [1,2,3,4,5,6,7]
b = [x ** 2 for x in a if x >= 3] 使列表中的大于等于3的元素执行平方操作.
列表推到式,并不是只能对列表进行推导,只不过名字叫列表推导式.
-
可以对元组,集合以及字典都可以推导
对列表进行推导
1 a = [1, 2, 3, 4, 5, 6, 7] 2 3 b = [x ** 2 for x in a] 4 5 c = [x ** 2 for x in a if x >= 5] 6 7 d = {x ** 2 for x in a if x >= 5} 8 9 e = (x ** 2 for x in a if x >= 5) 10 11 # 结果: [1, 4, 9, 16, 25, 36, 49] 12 print(b) 13 14 # 结果: [25, 36, 49] 15 print(c) 16 17 # 结果: {25, 36, 49} 18 print(d) 19 20 # 结果: 生成器对象<generator object <genexpr> at 0x00000000024E0D00> 元组不可变 21 # 个人猜测,e = (x ** 2 for x in a if x >= 5) 此时的括号不是元组圆括号(),而当成运算符圆括号() 22 # 因为是运算符圆括号,所以系统不知道,你想获取一个什么样类型的数据,因此给你返回一个序列对象, 23 # 让你自己将生成器对象类型转换成你期望的数据类型. 24 print(e) 25 26 # 以下三行print代码要独立运行,不要同时运行. 27 # 结果: [25, 36, 49] 28 print(list(e)) 29 # 结果: {25, 36, 49} 30 print(set(e)) 31 # 结果: (25, 36, 49) 32 print(tuple(e))
对集合进行推导
1 a = {1, 2, 3, 4, 5, 6, 7} 2 3 b = [x ** 2 for x in a if x >= 3] 4 5 c = {x ** 2 for x in a if x >= 3} 6 7 d = (x ** 2 for x in a if x >= 3) 8 9 # 结果: [9, 16, 25, 36, 49] 返回结果类型是列表. 10 print(b) 11 12 # 结果: {36, 9, 16, 49, 25} 返回结果类型是集合. 13 print(c) 14 15 # 结果: 生成器对象<generator object <genexpr> at 0x00000000023E0D00> 元组不可变 16 # 个人猜测,e = (x ** 2 for x in a if x >= 5) 此时的括号不是元组圆括号(),而当成运算符圆括号() 17 # 因为是运算符圆括号,所以系统不知道,你想获取一个什么样类型的数据,因此给你返回一个序列对象, 18 # 让你自己将生成器对象类型转换成你期望的数据类型. 19 print(d) 20 21 # 以下三行print代码要独立运行,不要同时运行. 22 # 结果: [9, 16, 25, 36, 49] 23 print(list(d)) 24 # 结果: {9, 16, 25, 36, 49} 25 print(set(d)) 26 # 结果: (9, 16, 25, 36, 49) 27 print(tuple(d))
对元组进行推导
1 a = (1, 2, 3, 4, 5, 6, 7) 2 3 b = [x ** 2 for x in a if x >= 3] 4 5 c = {x ** 2 for x in a if x >= 3} 6 7 d = (x ** 2 for x in a if x >= 3) 8 9 # 结果: [9, 16, 25, 36, 49] 返回结果类型是列表. 10 print(b) 11 12 # 结果: {36, 9, 16, 49, 25} 返回结果类型是集合. 13 print(c) 14 15 # 结果: 生成器对象<generator object <genexpr> at 0x00000000023E0D00> 元组不可变 16 # 个人猜测,e = (x ** 2 for x in a if x >= 5) 此时的括号不是元组圆括号(),而当成运算符圆括号() 17 # 因为是运算符圆括号,所以系统不知道,你想获取一个什么样类型的数据,因此给你返回一个序列对象, 18 # 让你自己将生成器对象类型转换成你期望的数据类型. 19 print(d) 20 21 # 以下三行print代码要独立运行,不要同时运行. 22 # 结果: [9, 16, 25, 36, 49] 23 print(list(d)) 24 # 结果: {36, 9, 16, 49, 25} 25 print(set(d)) 26 # 结果: (9, 16, 25, 36, 49) 27 print(tuple(d))
使用map + filter来完成部分元素的改变
1 a = [1, 2, 3, 4, 5, 6, 7, 8] 2 3 filter_obj = filter(lambda x: True if x >= 3 else False, a) 4 5 map_obj = map(lambda x: x ** 2, list(filter_obj)) 6 7 # 结果: [9, 16, 25, 36, 49, 64] 8 print(list(map_obj))
对字典进行推导
1 a = {'java': 24, 'python': 18, 'android': 7} 2 3 b = [key for key, valuse in a.items()] 4 5 c = {valuse: key for key, valuse in a.items()} 6 7 d = {valuse for key, valuse in a.items()} 8 9 e = [valuse for key, valuse in a.items() if valuse > 7] 10 11 # 结果: ['java', 'python', 'android'] 12 print(b) 13 14 # 结果: {24: 'java', 18: 'python', 7: 'android'} 15 print(c) 16 17 # 结果: {24, 18, 7} 18 print(d) 19 20 # 结果: [24, 18] 21 print(e)
******
posted on 2019-03-27 11:50 jaydenjune 阅读(68) 评论(0) 收藏 举报
浙公网安备 33010602011771号