python3 filter问题

本文探讨了Python 2与3中filter函数行为差异,指出在Python 3中filter返回迭代器导致src_list转换为迭代器影响后续filter。解决方法是每次使用filter前将迭代器转换回list。核心内容围绕代码调试与Python迭代器理解。

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

给定下面一段过滤列表的代码

def filterKeyList(key_list, src_list):
	for key in key_list:
		#print(key)
		src_list = filter(lambda x: key in x, src_list)
        
	return src_list

src_list = ['what are you nong', 'what are you nong sha lie ', 'your what name please', 'what?ou are']
key_list = ['what', 'are', 'you']
src_list = filterKeyList(key_list, src_list)
for s in src_list:
	print(s)

运行后结果:在这里插入图片描述

从运行结果显然是不符合预期的,最后一个没有包含what are you字符的也返回了。
这是什么情况?

通过文档我们看到,python2与python3的filter返回值类型是不一样的。
在这里插入图片描述python3 filter返回的是迭代器,这样在下次进行filter的时候,src_list就变成了迭代器,需要转为list之后才能进行下一次的filter,从而得到预期的结果。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值