Python筛选长度为4的嵌套子列表索引时返回错误结果
代码错误原因
你写的判断逻辑存在两处根本性错误,才会出现不符合预期的输出:
- 列表推导式
[x for x in list_of_lists if len(x) == 4]的作用是遍历整个嵌套列表,把所有长度为4的子列表收集成一个新的独立列表,根本不是用来判断当前遍历项的长度。 - 后续的
in j判断逻辑完全写反:你实际在判断「所有长度为4的子列表组成的新列表,是不是当前遍历到的子列表j的内部元素」,而非判断当前子列表j本身长度是否为4。
举个对应你遇到异常的场景:如果嵌套列表里存在一个长度为1的子列表,它唯一的元素刚好是前面列表推导生成的、收集了所有长度为4子列表的那个列表,这个判断就会返回True,对应的索引就会被错误打印出来,这就是你看到的额外输出的来源。
修正后的实现
你只需要直接判断当前遍历到的子列表长度即可,不需要额外嵌套列表推导:
for i, sub_list in enumerate(list_of_lists): if len(sub_list) == 4: print(i)
如果需要一次性收集所有符合要求的索引,可以直接用列表推导式实现:
target_indexes = [idx for idx, sub_list in enumerate(list_of_lists) if len(sub_list) == 4]
内容的提问来源于stack exchange,提问作者Nanda
相关产品推荐
相关产品推荐

