以下内容译自python文档中关于列表推导的说明,基本上包含了常见的几种列表推导方式,这里把它们记录下来也是为了防止遗忘,也方便以后查询。
1. 平方列表
如果你想创建一个包包含1到10的平方的列表,可以用下面的方法:
>>>squares = []
>>>for x in range():
...squares.append(x**)
...
>>>squares
[,,,,,,,,,]
但是使用列表推导可以更简洁地实现:
>>>squares = [x** for x in range()]
另外,还有一种等价的方法,要用到lambd演算:
>>>squares = map(lambd x:x**,range())
相比较而言,还是上面的方法更简洁直观。
2.其它方法
>>> vec = [-, -, , , ]
>>> # 原列表的所有元素乘以2,成生一个新的列表
>>> [x* for x in vec]
[-, -, , , ]
>>> # 通过if条件筛选掉小于0的元素
>>> [x for x in vec if x >= ]
[, , ]
>>> # 可以将函数作用于所有元素从而生成一个新的列表
>>> [abs(x) for x in vec]
[, , , , ]
>>> # 调用列表元素的对象方法来生成新列表
>>> freshfruit = [' banana', ' loganberry ', 'passion fruit ']
>>> [weapon.strip() for weapon in freshfruit]
['banana', 'loganberry', 'passion fruit']
>>> # 生成双元组列表,比如 (number, square)
>>> [(x, x**) for x in range()]
[(, ), (, ), (, ), (, ), (, ), (, )]
>>> # 推导式中的元组必须用括号括起来,否则会报错
>>> [x, x** for x in range()]
File "<stdin>", line
[x, x** for x in range()]
^
SyntaxError: invalid syntax
>>> # 列表降维,从嵌套的二维列表降为一维列表
>>> vec = [[,,], [,,], [,,]]
>>> [num for elem in vec for num in elem]
[, , , , , , , , ]