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

时间:2010-06-16 16:38:38

标签: python

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

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

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

我想知道如何从嵌套列表中轻松删除元素?

8 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:4)

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。

答案 2 :(得分: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来保存嵌套列表的上述级别来解决我的问题。

答案 3 :(得分:1)

如果您有多个嵌套级别,这可能会有所帮助

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

答案 4 :(得分:1)

如果您只想按索引删除 ,则可以使用此方法

m[0].pop(1)

由此您只能指定索引。 如果您只知道要删除的职位,这会很有用。

答案 5 :(得分:0)

您可以使用以下删除功能进行删除:-del m[1][1] 或使用以下代码

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

答案 6 :(得分:0)

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

m[0].remove(345)

答案 7 :(得分:0)

执行此操作的快捷方式是使用del命令:

del list[element] element[nested element] 

del [] []