语法
- [表达式 for 元素 in 可迭代对象 if 条件]
- 使用中括号[]创建一个列表
- 表达式的返回值会放入这个创建的列表中
- 内部是for循环
- if条件语句可选,如果有if语句,必须是if的条件判断成功,才会执行表达式
- 将每次for循环执行表达式后的返回值,依次放入创建的列表中,for循环迭代多少次就把多少个返回值放入列表中,最后返回一个新的列表
- 一般使用列表解析式可以完成列表的初始化
- 能用列表解析式就尽量用列表解析式,非常常用
-
# 计算0..9这9个数加1后的平方 print[(i + 1) ** 2] for i in range(10)] '''输出: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] '''
-
newlist = [print(i) for i in range(10)] # 注意:print(i)这个表达式的值就是None print(newlist) '''输出: 0 1 2 3 4 5 6 7 8 9 [None, None, None, None, None, None, None, None, None, None] '''
列表解析式是一种语法糖
- 编译器会优化,不会因为简写而影响效率,反而因优化提高了效率
- 减少程序员工作量,减少出错
- 简化了代码,但可读性增强
列表解析式的执行效率
-
# 普通for循环求100000以内的偶数 import datetime start = datetime.datetime.now() even = [] for i in range(100000): if i %2 ==0: even.append(i) end = datetime.datetime.now() print((end - start).total_seconds()) '''输出: 0.013969 '''
-
# 使用列表解析式求100000以内的偶数 import datetime start = datetime.datetime.now() even = [i for i in range(100000) if i % 2 == 0] end = datetime.datetime.now() print((end - start).total_seconds()) '''输出: 0.010038 '''
列表解析式进阶
- [expr for item in iterable if cond1 if cond2 ] 或者 [expr for item in iterable if cond1 and cond2 ]
- 等价于:
ret = [] for item in iterable: if cond1: if cond2: ret.append(expr)
- 等价于:
- [expr for item in iterable if cond1 or cond2]
- 等价于:
ret = [] for item in iterable: if cond1
- 等价于: