如果我有一个嵌套列表:
m=[[34,345,232],[23,343,342]]
如果我写m.remove(345)
,它会提示错误消息,说该元素不在列表中。
我想知道如何轻松地从嵌套列表中删除一个元素。
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。这个没有捷径。您必须从容器列表中的每个嵌套列表中删除值:
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")
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]]
您可以使用此代码删除345。
m[0].remove(345)
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来保存嵌套列表的上一级来解决问题的。
enumerate()
包装器来代替显式变量i
:for i, item in enumerate(nodes):
- Ferdinand Beyerm[0].pop(1)
通过这个方法,你可以只指定索引。如果你只知道要删除的位置,这将非常有帮助。
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)
您可以使用delete删除:- del m [1] [1]
或者使用以下代码
for i in m:
for j in i:
if j==345:
i.remove(j)
print(m)
del list[element] element[nested element]
del [] []