如何从循环中的嵌套列表中删除记录?
How to delete record from a nested list in a loop?
我有这样的嵌套列表 [a,1],[b,2],[c,3]
我的代码:
for i in list:
if i[0] == 'b':
del i
那是行不通的。代码不会崩溃,但也不会删除。
我正在尝试类似的东西:
for i in list:
if something:
del i[1]
del i[0]
但是 returns [a,1],[],[c,3] 我对此并不满意。
在迭代列表的同时从列表中删除不是一个好主意,请尝试改用列表理解:
List = [L for L in List if L[0] != 'b']
另一个答案很好,但是回答你的问题(即使在迭代时删除不是一个好习惯):
list = [['a',1],['b',2],['c',3]]
for i in list:
if i[0] == 'b':
list.remove(i)
print(list)
您也可以避免像这样从正在迭代的列表中删除:
list = [['a',1],['b',2],['c',3]]
for i in list.copy():
if i[0] == 'b':
list.remove(i)
print(list)
不过,另一个示例中的列表推导更清晰、更易读。
您可以为此使用 enumerate
方法。看看下面的代码片段。
li = ['a' , 'b' , 'c' , 'd']
for i , elm in enumerat(li):
if elm == 'a':
del li[i]
使用 enumerate
函数,您将可以访问两个值。代码中的第一个值 i
是元素的索引,第二个值是元素本身。
可以在每次迭代中检查self中的元素,然后根据需要使用索引修改列表。
我有这样的嵌套列表 [a,1],[b,2],[c,3]
我的代码:
for i in list:
if i[0] == 'b':
del i
那是行不通的。代码不会崩溃,但也不会删除。
我正在尝试类似的东西:
for i in list:
if something:
del i[1]
del i[0]
但是 returns [a,1],[],[c,3] 我对此并不满意。
在迭代列表的同时从列表中删除不是一个好主意,请尝试改用列表理解:
List = [L for L in List if L[0] != 'b']
另一个答案很好,但是回答你的问题(即使在迭代时删除不是一个好习惯):
list = [['a',1],['b',2],['c',3]]
for i in list:
if i[0] == 'b':
list.remove(i)
print(list)
您也可以避免像这样从正在迭代的列表中删除:
list = [['a',1],['b',2],['c',3]]
for i in list.copy():
if i[0] == 'b':
list.remove(i)
print(list)
不过,另一个示例中的列表推导更清晰、更易读。
您可以为此使用 enumerate
方法。看看下面的代码片段。
li = ['a' , 'b' , 'c' , 'd']
for i , elm in enumerat(li):
if elm == 'a':
del li[i]
使用 enumerate
函数,您将可以访问两个值。代码中的第一个值 i
是元素的索引,第二个值是元素本身。
可以在每次迭代中检查self中的元素,然后根据需要使用索引修改列表。