You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用filter()与lambda表达式过滤元组列表时结果异常求助

问题分析与解决方法

问题根源

filter() 函数的工作逻辑是:对每个传入的元素执行lambda表达式,若表达式返回真值则保留该元素,否则过滤掉。

你当前的lambda表达式返回的是一个列表:[s_a_p[0], s_a_p[1] < 0],而在Python中,任何非空列表都会被判定为True——哪怕列表里包含False值,整个列表本身的布尔值依然是True。这就导致所有元素都被filter()保留下来,完全不符合你“过滤人口小于0的元素”的预期。

解决方法

修改lambda表达式,让它直接返回人口判断的布尔结果,不要包装成列表:

state_and_population = [
( 'Uttar Pradesh' ,  199812341 ),
( 'Maharashtra' , 112372972 ),
( 'Bihar' , 103804637 ),
( 'West Bengal' , 91347736 ),
( 'Madhya Pradesh' , 72597565 ),
( 'Tamil Nadu' , 72138958 ),
( 'Rajasthan' , 68621012 ),
( 'Karnataka' , 61130704 ),
( 'Gujarat' , 60383628 ),
( 'Andhra Pradesh' , 49386799 )
]

# 直接返回布尔判断结果
filtered_object = filter(lambda s_a_p: s_a_p[1] < 0, state_and_population)

print(list(filtered_object))  # 输出: []

修改后,lambda对每个元组返回s_a_p[1] < 0的布尔值,由于所有人口数值都是正数,判断结果全为False,因此filter()会过滤掉所有元素,最终输出空列表,符合你的预期。

内容的提问来源于stack exchange,提问作者Ankur Guha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 11:31:01