Python字符串比较:为何列表推导式在元组列表中未达预期?
问题与解决:从元组列表匹配取值
我需要从元组列表中,依据元组内的某个值匹配后获取目标字符串。
最初的错误代码
使用列表推导式尝试实现:
zone = [x for x in zoneList if (x[2] == usageRow[2])][1]
数据示例
zoneList = [('BOB', 'HIGH_ZONE', 'WI'), ('MIKE', 'LOW_ZONE', 'IL'),....] usageRow[2] = 'WI'
对比:可用的循环代码
同样逻辑用普通循环却能正常得到结果:
for x in zoneList: if (x[2] == usageRow[2]): zone = x[1]
我无法理解两种写法的结果差异,原本预期列表推导式能返回正确值。
问题修正
感谢Brian61354270指出问题所在:原列表推导式存在两个问题:
- 用
[1]取匹配结果的第二个元素,但匹配WI的元组是结果列表里的第一个元素,应该用[0]; - 没有提取元组里的目标字段
x[1]。
修正后的正确代码:
zone = [x for x in zoneList if (x[2] == usageRow[2])][0][1]
内容的提问来源于stack exchange,提问作者Donald Deutscher
相关产品推荐
相关产品推荐

