列表含多个元组时判断元组索引1值≤255的if逻辑异常问题
问题原因
你当前写的列表推导式逻辑是筛选出列表中所有满足「元组第2个索引值≤255」的元素,Python中对非空列表的布尔判断为真,因此只要列表里有至少一个符合条件的元组,就会进入print("a")的分支,和你预期的「只要有一个元组的第2个索引值超过255就打印b」的校验逻辑完全相反。
你给出的测试用例[(0, 323), (1, 1)]中,第二个元组(1,1)符合筛选条件,最终推导生成的列表为[(1,1)]非空,因此判断为真打印a,不符合预期。
修复方案
如果你需要实现「所有元组的第2个索引值都≤255时打印a,否则打印b」的校验逻辑,直接使用all()函数判断即可,这是最高效的写法(会短路判断,遇到第一个不符合条件的元素就直接返回假,不用遍历完整个列表):
if all(i[1] <= 255 for i in a): print("a") else: print("b")
测试验证:
- 输入
[(0, 323)]:all()判断为假,打印b,符合预期 - 输入
[(0, 323), (1, 1)]:all()判断为假,打印b,符合预期 - 输入
[(0, 200), (1, 255)]:all()判断为真,打印a,符合预期
内容的提问来源于stack exchange,提问作者Pan
相关产品推荐
相关产品推荐

