对一个列表(迭代器)中的元素进行批量处理是一个很常见的业务需求,在 Python 中,一般有三种解决方案:for
循环,列表推导式,或者map()
,filter()
函数。
例如我们计算一下 100 以内奇数的平方和。
# for loop
total = 0
for x in range(100):
if x % 2:
total += x * x
# list comprehension
sum(x * x for x in range(100) if x % 2)
# map(), filter()
sum(map(lambda x: x * x, filter(lambda x: x % 2, range(100))))
for
循环方案最容易理解但有些繁琐,列表推导式方案就简洁了很多,map()
,filter()
方案存在一个问题就是要理解它们嵌套关系和执行顺序。
三种方案的效率也可以进行一下比较。
可以看到 for 循环和列表推导式的效率是相近的,而map()
,filter()
方案就慢很多,这是因为map()
,filter()
方案中进行了大量的函数调用,而 Python 解释器对列表推导式有专门的优化。
我按照自己的尺度给三种方案做了一个评价。
方案 | 可理解度 | 简洁度 | 执行效率 |
---|---|---|---|
for loop | ★★★ | ★ | ★★★ |
list comprehension | ★★ | ★★★ | ★★★ |
map(),filter() | ★★ | ★★ | ★ |
综合而言,在 Python 中进行列表(迭代器)的处理,列表推导式是更简洁,效率更高的方案,也更 Pythonic,不过当列表推导式过于复杂的时候,转而使用for
循环会使代码更好理解和可维护。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有