Python列表推导式(listcomps)和生…

本文介绍了Python中列表推导式(list comprehension)和生成器表达式(generator expression)的概念及应用实例。列表推导式可以简洁地创建列表,而生成器表达式则通过惰性计算节省内存资源。

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

列表推导式(list comprehension,listcomps)是一个有逻辑代码组成的结构,它构造了一个包含了由那段逻辑代码所生成的值或对象的列表。几个例子:
data = [x +1 for x in range(10)],打印结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

even_numbers = [x for x in range(10) if x % 2 == 0],打印结果:[0, 2, 4, 6, 8]

L = [(x+1,y+1) for x in range(3) for y in range(5)],打印结果:[(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5),(3, 1), (3, 2), (3, 3), (3, 4), (3, 5)]

N=[x+10 for x in range(10) if x>5],打印结果:[16, 17, 18, 19]

阅读理解列表推导式的推荐做法是先从里面的for循环开始,向右查看是否有if条件,然后将推导式开始的表达式映射到每一个匹配的元素上去。

生成器表达式(generator expression,genexp)是从Python 2.4开始支持的特性。它和列表推导式的不同点在于,它工作的方式是每次只获取一个元素,而不是一口气处理和构造整个数据结构。这样做的潜在有点是可以节省大量的内存,虽然有时候是要付出一点性能上的代价。生成器表达式的例子:
even_numbers = (x for x in range(10000) if x % 2 == 0),打印结果:<generator object <genexpr> at 0x0219F3F0>

L= (i + 1 for i in range(10) if i % 2) 
L1=[] 
for i in L: 
    L1.append(i)
print L1    打印结果:[2, 4, 6, 8, 10]

生成器表达式并不真正创建数字列表,而是返回一个生成器,这个生成器在每次计算出一个条目后,把这个条目“产生”(yield)出来。 生成器表达式使用了“惰性计算”(lazy evaluation,也有翻译为“延迟求值”,我以为这种按需调用call by need的方式翻译为惰性更好一些),只有在检索时才被赋值( evaluated),所以在列表比较长的情况下使用内存上更有效。A generator object in python is something like a lazy list. The elements are only evaluated as soon as you iterate over them.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值