python使用列表推导式(列表解析)及生成器表达式构建列表/序列

我们平时要构建列表或其他序列,除了使用for循环外,还可以使用列表推导式创建列表,或使用生成器表达式创建其他序列。
相对于使用for循环,后者的代码更加简洁易于理解,同时运行速度也更快。

1. 列表推导式(列表解析)

使用列表推导式快速创建列表:

>>> new_list = [e for e in range(5)]
>>> new_list
[0, 1, 2, 3, 4]

创建列表时,对列表元素进行选择:

>>> new_list = [e for e in range(5) if e<4]
>>> new_list
[0, 1, 2, 3]

2. 生成器表达式

生成器表达式构建语法和列表表达式几乎一样,只需要将方括号换成圆括号即可。

若需要构建非列表类型的序列,使用生成器表达式要更好。
因为生成器表达式使用迭代器协议逐个产出项,而不是构建整个列表提供给其他构造函数,这就使生成器表达式占用的内存更少。

>>> new_obj = (e for e in range(5))   
>>> new_obj
<generator object <genexpr> at 0x0000028739F374C0>
>>> type(new_obj)
<class 'generator'>

因为生成器表达式返回的是一个生成器对象,因此使用表达式构建元组时,需要使用tuple()函数进行转换。

>>> new_tuple = tuple(e for e in range(5))  
>>> new_tuple
(0, 1, 2, 3, 4)

3. 注意

使用“海象运算符(:=)”赋值的变量在列表推导式或生成器表达式返回后依然可以访问,其他变量作用域限定在列表推导式内部。

>>> new_list = [elem:=e for e in range(5)] 
>>> new_list
[0, 1, 2, 3, 4]
>>> elem
4
>>> e
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'e' is not defined
  • 22
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值