嵌套列表条件筛选问题:如何正确提取不含-1的子列表?
嵌套列表筛选问题解决办法
给定嵌套列表:
list1 = [[0, 3], [1, 2], [2, -1], [3, -1], [4, -1], [5, -1], [6, -1], [7, -1]]
需要筛选出所有元素均不为-1的子列表,最终得到:
list2 = [[0, 3], [1, 2]]
原代码问题分析
你写的双层循环逻辑错误:
- 遍历子列表的每个元素时,只要有一个元素不等于-1就将整个子列表添加到
list2,导致符合条件的子列表被重复添加(比如[0,3]会被添加两次)。 - 包含
-1的子列表(如[2,-1]),只要有一个元素不是-1也会被错误添加,完全不符合筛选需求。
正确实现方式
方式1:列表推导式(推荐)
直接通过条件判断筛选子列表,这是最简洁的实现:
list1 = [[0, 3], [1, 2], [2, -1], [3, -1], [4, -1], [5, -1], [6, -1], [7, -1]] list2 = [sublist for sublist in list1 if -1 not in sublist]
方式2:修正后的普通循环
如果需要用循环实现,只需遍历每个子列表并做一次判断即可:
list1 = [[0, 3], [1, 2], [2, -1], [3, -1], [4, -1], [5, -1], [6, -1], [7, -1]] list2 = [] for sublist in list1: if -1 not in sublist: list2.append(sublist)
验证结果
执行上述任意代码后,list2的输出均为:
[[0, 3], [1, 2]]
完全符合预期。
内容的提问来源于stack exchange,提问作者Abhinandra Singh
相关产品推荐
相关产品推荐

