python列表推导的几个例子

以下内容译自python文档中关于列表推导的说明,基本上包含了常见的几种列表推导方式,这里把它们记录下来也是为了防止遗忘,也方便以后查询。

1. 平方列表
如果你想创建一个包包含1到10的平方的列表,可以用下面的方法:

>>>squares = []
>>>for x in range(10):
    ...squares.append(x**2)
...
>>>squares
[0,1,4,9,16,25,36,49,64,81]

但是使用列表推导可以更简洁地实现:

>>>squares = [x**2 for x in range(10)]

另外,还有一种等价的方法,要用到lambd演算:

>>>squares = map(lambd x:x**2,range(10))

相比较而言,还是上面的方法更简洁直观。


2.其它方法

>>> vec = [-4, -2, 0, 2, 4]
>>> # 原列表的所有元素乘以2,成生一个新的列表
>>> [x*2 for x in vec]
[-8, -4, 0, 4, 8]
>>> # 通过if条件筛选掉小于0的元素
>>> [x for x in vec if x >= 0]
[0, 2, 4]
>>> # 可以将函数作用于所有元素从而生成一个新的列表
>>> [abs(x) for x in vec]
[4, 2, 0, 2, 4]
>>> # 调用列表元素的对象方法来生成新列表
>>> freshfruit = ['  banana', '  loganberry ', 'passion fruit  ']
>>> [weapon.strip() for weapon in freshfruit]
['banana', 'loganberry', 'passion fruit']
>>> # 生成双元组列表,比如 (number, square)
>>> [(x, x**2) for x in range(6)]
[(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)]
>>> # 推导式中的元组必须用括号括起来,否则会报错
>>> [x, x**2 for x in range(6)]
  File "<stdin>", line 1
    [x, x**2 for x in range(6)]
               ^
SyntaxError: invalid syntax
>>> # 列表降维,从嵌套的二维列表降为一维列表
>>> vec = [[1,2,3], [4,5,6], [7,8,9]]
>>> [num for elem in vec for num in elem]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值