如何过滤不同长度子列表组成的嵌套列表 移除含指定元素的子列表
问题解答
原有代码错误原因
你的代码不生效和子列表长度没有任何关系,错误来自两个核心逻辑问题:
isinstance()是用来判断对象所属类型的语法,完全不适合用来判断元素是否存在于列表中- 你判断的主体是整个子列表对象,而非子列表内部是否包含
woodland元素
最优实现方式
直接用Python原生的in成员判断结合列表推导式即可,这是写法最简洁、执行效率最高的方案:
# 如果woodland、grass等是你提前定义的变量,用如下写法 new_list = [sub_list for sub_list in first_list if woodland not in sub_list] # 如果woodland是字符串常量,需要加引号 new_list = [sub_list for sub_list in first_list if "woodland" not in sub_list]
逻辑说明
遍历外层列表的每一个子列表,只要子列表中不存在woodland元素就保留,in关键字对任意长度的列表都能自动完成成员检测,不需要你手动处理不同长度的子列表逻辑。
这个方案的时间复杂度为O(n*m)(n为外层列表长度,m为子列表平均长度),是这类列表过滤需求的理论最优时间复杂度,没有额外冗余开销。
内容的提问来源于stack exchange,提问作者EmJ
相关产品推荐
相关产品推荐

