1、列表解析:

  * 举例:生成一个列表,元素0-9,对每一个元素自增1后求平方返回新列表。

1 test = [ (i + 1) ** 2 for i in range(10)]
2 print(test) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
3 
4 
5 test = []
6 for i in range(10):
7     test.append((i + 1) ** 2)
8 print(test) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

 

  可以看出,是将一个for循环拉平,放到一个列表中。(不是简单的拉平!!)

  

  * 语法:  

    • [ 返回值 for 元素  in 可迭代带对象 if 条件 ]
    • 使用中括号 [] ,内部是for 循环 ,if条件语句可选
    • 返回一个列表

  * 列表解析式是一种语法糖

    • 编译器会优化,不会因为简写而影响效率,反而因优化提高了效率
    • 减少程序员工作量,减少出错
    • 简化了代码,但是可读性增强
 1 # newlist = [print(i,end='') for i in range(10)]
 2 print(newlist)
 3 # 0123456789[None, None, None, None, None, None, None, None, None, None]
 4 # print是打印,并不是解析式生成的值,只不过没循环一次,列表中追加一个None而已
 5 
 6 newlist = [] 
 7 for i in range(10):
 8     print(i, end='')
 9     newlist.append(None)
10 print(newlist)
11 
12 #0123456789[None, None, None, None, None, None, None, None, None, None]
13 
14 
15 # 获取10以内的偶数
16 # lst = [ i for i in range(10) if not i % 2]
17 # print(lst) # [0, 2, 4, 6, 8]
18 # lst = [ i for i in range(10) if  i % 2 == 0]
19 # print(lst) # [0, 2, 4, 6, 8]
 1 lst = [i for i in range(21) if not i % 2 if not i % 3]
 2 print(lst) # [0, 6, 12, 18]
 3 lst = [i for i in range(21) if  i % 2 == 0 if i % 3 == 0]
 4 print(lst) # [0, 6, 12, 18]
 5 
 6 lst = [i for i in range(21) if not i % 2 elif not i % 3]
 7 print(lst) # 这样是会抛SyntaxError异常
 8 
 9 
10 lst = []
11 for i in range(21):
12     if i % 2 ==0:
13         lst.append(i)
14     elif i % 3 == 0:
15         lst.append(i)
16 print(lst)
17 # [0, 2, 3, 4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20]
18 首先,结果不满足,其次,如果有elif 同一层的语句,是不能写成如上的解析式的。
19 
20 lst = []
21 for i in range(21):
22     if i % 2 ==0 and i % 3 == 0:
23         lst.append(i)
24 print(lst) # [0, 6, 12, 18]
25 
26 #-------->
27 
28 lst = [ i for i in range(21) if not i % 2 and  i % 3 ==0]
29 print(lst) # [0, 6, 12, 18]
30 
31 
32 lst = [ i for i in range(21) if not i % 2 or  i % 3 ==0]
33 print(lst) # [0, 2, 3, 4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20]
举例

相关文章: