如何从嵌套列表中删除元素?

kak*_*aki 6 python

如果我有一个嵌套列表,如:

m=[[34,345,232],[23,343,342]]
Run Code Online (Sandbox Code Playgroud)

如果我写m.remove(345)它给出一条错误消息,说明元素不在列表中.

我想知道如何从嵌套列表中删除元素,很容易?

unu*_*tbu 8

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]]
Run Code Online (Sandbox Code Playgroud)

请注意,remove(345)仅删除 345 的第一次出现(如果存在)。上面的代码删除了 345 的所有出现。


Fer*_*yer 6

这没有捷径可走。您必须从容器列表中的每个嵌套列表中删除该值:

for L in m:
    try:
        L.remove(345)
    except ValueError:
        pass
Run Code Online (Sandbox Code Playgroud)

如果您想要类似的行为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")
Run Code Online (Sandbox Code Playgroud)