Python如何简化遍历列表中符合指定条件元素的for循环写法?
Python 目前没有原生支持你期望的 for x in foo if x > 2 格式的语法,不过有两种等价的简洁写法可以实现相同需求,且没有冗余的内层for关键字和临时变量:
Python3 适用写法
使用内置的filter()函数,它默认返回迭代器,内存效率和生成器表达式一致:
# 简单过滤逻辑用lambda实现 for x in filter(lambda y: y > 2, foo): # Do something # 复杂过滤逻辑可以单独封装为函数,可读性更高 def custom_filter(elem): # 任意自定义过滤规则 return elem > 2 and type(elem) == int for x in filter(custom_filter, foo): # Do something
如果更习惯把判断放在循环体内,也可以用continue跳过不符合要求的元素:
for x in foo: if x <= 2: continue # Do something
Python2 兼容写法
Python2 中的filter()默认返回列表,要实现和Python3一致的迭代器效果,使用itertools.ifilter即可:
import itertools # 简单场景 for x in itertools.ifilter(lambda y: y > 2, foo): # Do something # 复杂逻辑搭配自定义过滤函数 for x in itertools.ifilter(custom_filter, foo): # Do something
如果不需要考虑大列表的内存占用,Python2中直接使用filter()也可以,效果和你原来的列表推导式写法完全一致。
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

