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)    收藏  举报

导航