如何从嵌套列表中删除元素?
如果我有一个嵌套列表,比如:
m=[[34,345,232],[23,343,342]]
如果我写 m.remove(345)
,它会给我一个错误提示,说这个元素不在列表里。
我想知道怎么才能简单地从这个嵌套列表中删除一个元素。
10 个回答
2
如果你有多个嵌套层级,这个可能会对你有帮助。
def nested_remove(L, x):
if x in L:
L.remove(x)
else:
for element in L:
if type(element) is list:
nested_remove(element, x)
>>> m=[[34,345,232],[23,343,342]]
>>> nested_remove(m, 345)
>>> m
[[34, 232], [23, 343, 342]]
>>> m=[[34,[345,56,78],232],[23,343,342]]
>>> nested_remove(m, 345)
>>> m
[[34, [56, 78], 232], [23, 343, 342]]
9
In [5]: m=[[34,345,232],[23,343,342]]
In [7]: [[ subelt for subelt in elt if subelt != 345 ] for elt in m]
Out[7]: [[34, 232], [23, 343, 342]]
请注意,remove(345)
只会删除第一个出现的 345(如果有的话)。而上面的代码会删除所有出现的 345。
6
这个没有捷径可走。你必须从容器列表中的每一个嵌套列表里都把值删除掉:
for L in m:
try:
L.remove(345)
except ValueError:
pass
如果你想要类似于 list.remove
的效果,可以使用下面这样的代码:
def remove_nested(L, x):
for S in L:
try:
S.remove(x)
except ValueError:
pass
else:
break # Value was found and removed
else:
raise ValueError("remove_nested(L, x): x not in nested list")