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

7

如果我有一个嵌套列表:

m=[[34,345,232],[23,343,342]]

如果我写m.remove(345),它会提示错误消息,说该元素不在列表中。

我想知道如何轻松地从嵌套列表中删除一个元素。


重复了。几天前已经问过完全相同的问题了。 - SilentGhost
@SilentGhost:请在您的评论中发布指向该问题的链接。 - VoodooChild
2
请提供重复问题的链接,我可能会从中得到一些建议。 - kaki
9个回答

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")

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]]

2

您可以使用此代码删除345。

m[0].remove(345)

1
i=0
for item in nodes:
    for itm in item:
        m=database_index[itm]
        print m
        if m[1]=='text0526' or m[1]=='text0194' or m[1]=='phone0526' or m[1]=='phone0194':
            nodes[i].remove(itm)
    i+=1

这是我如何通过使用变量i来保存嵌套列表的上一级来解决问题的。


1
你可以使用enumerate()包装器来代替显式变量ifor i, item in enumerate(nodes): - Ferdinand Beyer

1
如果您想仅按索引删除,可以使用此方法。
m[0].pop(1)

通过这个方法,你可以只指定索引。如果你只知道要删除的位置,这将非常有帮助。


0
如果您需要从嵌套列表中删除多个相同项(例如345),可以尝试以下方法:
for x in m:
    for index in range(len(x) -1, -1, -1):
        if x[index] == 345:
            del x[index]
    print(x)

或者

for x in m:
    for z in x:
        if z != 345:
            print(z)

0

您可以使用delete删除:- del m [1] [1] 或者使用以下代码

for i in m:
    for j in i:
        if j==345:
            i.remove(j)
print(m)

0
一个快捷的方法是使用del命令:
del list[element] element[nested element] 

del [] []

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接