使用列表推导式统计包含指定元素的列表项数量
问题
给定如下列表:
foolist = ['foo bar', 'foo', 'bar' 'foo bar']
我希望不使用正则表达式,统计该列表中包含'foo'的项的数量。请问有没有比以下一行代码更简洁的实现方式?
print(len([i for i in [ 'foo' in line for line in foolist ] if i == True]))
上述写法虽然可行,但像嵌套三元运算符一样让人觉得繁琐。
简洁实现方式
- 生成器表达式 +
sum(推荐)
Python里布尔值可直接作为整数计算(True等价于1,False等价于0),用sum直接统计符合条件的项数,这是最简洁且高效的写法:
print(sum('foo' in line for line in foolist))
- 简化版列表推导式
去掉原写法里多余的嵌套判断,直接筛选包含'foo'的项后取长度:
print(len([line for line in foolist if 'foo' in line]))
filter函数实现
用filter过滤出符合条件的元素,再转为列表获取长度:
print(len(list(filter(lambda x: 'foo' in x, foolist))))
其中第一种方法最优,生成器表达式无需创建完整列表,内存占用更低。
内容的提问来源于stack exchange,提问作者Lucky
相关产品推荐
相关产品推荐

