将元素分配给列表中的列表

时间:2018-08-07 10:30:45

标签: python python-3.x list loops iterable

我正在运行Python3.6,并且正在使用其中包含其他列表的列表。

list_array = [[1,0,1,0,2,2],
              [1,1,2,0,1,2],
              [2,2,2,1,0,1]]

我想修改名为list_array的列表,以删除子列表中所有值为2的条目。

我用于此的代码是

for k in list_array:
    k = [x for x in k if x!=2]

但是,此代码不会修改list_array。

为什么不能以这种方式替换list_array中列表中的元素?

3 个答案:

答案 0 :(得分:5)

您正在创建一个新列表,而不是分配给旧列表。您可以通过使用k[:] =添加分配来解决此问题,如下所示:

for k in list_array:
    k[:] = [x for x in k if x!=2]

答案 1 :(得分:1)

您的代码每次都会创建一个新列表,并删除前一个列表。

在最后一次迭代中,您应该获得以下信息:

k = [1, 0, 1]

相反,列表理解可以正常工作:

list_array = [[x for x in sublist if x != 2] for sublist in list_array]

输出:

[[1, 0, 1, 0], [1, 1, 0, 1], [1, 0, 1]]

如果要使用显式的for循环编写它,可以这样进行:

new_list_array = list()
for sublist in list_array:
    new_list_array.append([x for x in sublist if x != 2])

答案 2 :(得分:0)

您没有修改旧列表,可以像这样修改它

list_array = [[1,0,1,0,2,2],[1,1,2,0,1,2],[2,2,2,1,0,1]]
for k in list_array:
   k[:]= [x for x in k if x!=2] 


print(list_array)