Python的推导式与生成器
推导式与生成器
推导式可以从一个数据序列构建另一个新的数据序列的结构体。本质上可以将其理解成一种集合了变换和筛选功能的函数,通过这个函数把一个序列转换成另一个序列。
共有三种推导式:
- 列表(list)推导式
- 字典(dict)推导式
- 集合(set)推导式
列表推导式是一种创建新列表的便捷的方式,通常用于根据一个列表中的每个元素通过某种运算或筛选得到另外一系列新数据,创建一个新列表。 列表推导式由1个表达式跟一个或多个for 从句、0个或多个if从句构成。
1 | # 列表推导式由1个表达式跟一个或多个for 从句、0个或多个if从句构成。 |
for前面是一个表达式,in 后面是一个列表或能生成列表的对象。将in后面列表中的每一个数据作为for前面表达式的参数,再将计算得到的序列转成列表。if是一个条件从句,可以根据条件返回新列表。
for前面也可以是一个内置函数或自定义函数,例如:
1 | # 自定义函数f(x) |
列表推导式还可以用条件语句(if从句)对数据进行过滤,用符合特定条件的数据推导出新列表,例如:
1 | # 自定义函数f(x) |
可以用多个for从句对多个变量进行计算,例如:
1 | ls = [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y] |
列表推导式应用实例
1 | ls = [-4, -2, 0, 2, 4] |
将列俩表推导式的[]成()即可得到生成器
1 | print([x ** 3 for x in range(10)]) |
字典推导和列表推导的使用方法是类似的,只是中括号该改成大括号。
1 | dic = {'李明': '20191202001', '张凡':'20191202002'} # 姓名:学号 |
集合推导式跟列表推导式也是类似的, 唯区别在于它使用大括号{}。
1 | print({x ** 3 for x in range(10)}) |
1 | ls = [ |