Python的列表推导

本文介绍Python中的列表推导(List Comprehension)语法,这是一种简洁高效地根据已有可迭代对象生成新列表的方法。文章通过示例对比了使用for循环与列表推导的不同,并指出了列表推导在代码可读性方面的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是列表推导

大部分使用Python的人都用过它, 但却不知道它的名字.

列表推导, List Comprehension, 是Python的特色语法, 用于根据已有的可迭代对象生成一个新的list.
例如, 根据a生成b, b中的每一个元素是a中对应位置元素值的平方.

for循环可以这么写:

a = range(10)
b = []
for i in a:
    b.append(i * i)

用列表推导则是这么写:

a = range(10)
b = [i * i for i in a]

很明显, 从可读性上来讲, 列表推导的代码更容易理解.

缺点

在Python里, 变量作用域的概念很薄弱. 例如, 在上面的使用for的示例里, 变量i可以在for循环之外访问. 使用列表推导时也会需要使用临时变量. Python2.x里的列表推导临时变量可以在[]之外访问:

a = range(10)
i = 'hello'
print('before list comp', i)
b = [i * i for i in a]
print('after list comp', i)

用Python2.7执行, 输出为:

('before list comp', 'hello')
('after list comp', 9)

可以看到, 在列表推导执行前后, []之外的i的值发生了变化.
这种变量泄漏可能会在不经意间造成bug. Python3里改进了这个缺点. 若使用Python3执行上面的代码, 输出为:

before list comp hello
after list comp hello
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值