假设我有一个列表列表。
L = [[1,2,3], ['a',2,True],[1,44,33,12.1,90,2]]
我希望能够从列表L的每个子列表中删除特定元素的所有实例。
例如,我可能想删除数字2以便产生数字
L = [[1,3], ['a',True],[1,44,33,12.1,90]]
我尝试使用此功能+代码:
def remove_values_from_list(the_list, val):
return [value for value in the_list if value != val]
for i in L:
i = remove_values_from_list(i, '2')
但是输出仍然以原始形式给出L,并且不会删除2。
答案 0 :(得分:4)
i
是未连接到L
的变量。已为L
分配了一个值,然后将其重新分配给其他值;这根本不会影响L
。
执行此操作的一种非破坏性方法(即保留L
,并为结果添加新列表):
newL = [[value for value in the_list if value != val] for the_list in L]
一种破坏性的方式(即更改L
本身):
for the_list in L:
while value in the_list:
the_list.remove(value)
答案 1 :(得分:0)
尝试一下:
def remove_values_from_list(the_list, val):
return [[v for v in l1 if v!= val] for l1 in the_list]
在您的代码中,您正在检查是否只有一个子列表等效于val
参数。您需要在子列表中检查它。还有一个次要的错误是检查子列表中具有准确类型的项目。您正在搜索'2'
(str类型),其中子列表中有2
(int类型)。