我正在运行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中列表中的元素?
答案 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)