Python嵌套列表条件筛选:如何保留完整子列表?
修复列表推导式索引越界,筛选完整子列表
你的报错原因很直接:当子列表长度只有1时(比如['id2']),访问i[1]会触发索引越界——因为它根本没有第二个元素。
完全有单行的修复方案,不用单独写for循环,给你两种思路:
1. 保留原判断逻辑(筛选有第二个元素且该元素为真的子列表)
先判断子列表长度足够,再检查第二个元素:
new_data = [i for i in data if len(i) >= 2 and i[1]]
这样会先确保子列表至少有2个元素,避免索引越界,再验证第二个元素是否为真(和你最初的逻辑一致,比如示例里的1会被判定为真)。
2. 仅筛选长度恰好为2的子列表
如果你的需求只是要所有包含两个元素的子列表,不管第二个元素是什么,直接判断长度即可:
new_data = [i for i in data if len(i) == 2]
用你的示例data测试,两种写法都能得到期望的输出:
[ ['id1',1], ['id5',1] ]
内容的提问来源于stack exchange,提问作者Arash Howaida
相关产品推荐
相关产品推荐

