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]