如果找到任何多个值,则删除嵌套列表

时间:2016-07-12 11:56:37

标签: python python-3.x list-comprehension nested-lists

我有一个列表列表,我想删除所有包含多个值的嵌套列表。

list_of_lists = [[1,2], [3,4], [5,6]]
indices = [i for i,val in enumerate(list_of_lists) if (1,6) in val]

print(indices)
[0]

我想要一个指数列表,其中这个条件是我可以:

del list_of_lists[indices]

删除包含特定值的所有嵌套列表。我猜这个问题是我尝试检查多个值(1,6),因为使用16工作。

1 个答案:

答案 0 :(得分:3)

您可以使用设置操作:

if not {1, 6}.isdisjoint(val)

如果其他序列或集合中没有值出现,则该集合是不相交的:

>>> {1, 6}.isdisjoint([1, 2])
False
>>> {1, 6}.isdisjoint([3, 4])
True

或者只测试两个值:

if 1 in val or 6 in val

我不会建立一个索引列表。只需重建列表并在新列表中过滤 out 您不想要的任何内容:

list_of_lists[:] = [val for val in list_of_lists if {1, 6}.isdisjoint(val)]

通过分配[:]整个切片,您可以替换list_of_lists中的所有索引,更新列表对象就地

>>> list_of_lists = [[1, 2], [3, 4], [5, 6]]
>>> another_ref = list_of_lists
>>> list_of_lists[:] = [val for val in list_of_lists if {1, 6}.isdisjoint(val)]
>>> list_of_lists
[[3, 4]]
>>> another_ref
[[3, 4]]

有关分配切片的详细信息,请参阅What is the difference between slice assignment that slices the whole list and direct assignment?