如何从列表列表中的所有列表中删除元素?

时间:2019-06-03 11:46:13

标签: python python-3.x list

假设我有一个列表列表。

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。

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类型)。

相关问题