从嵌套列表中删除值不起作用

时间:2019-02-24 12:52:02

标签: python python-3.x

到目前为止,我的大学作业看起来像这样:

data = [[1,2,3], [4,5,6], [7,8,9]]
cout = [[]]*3
for i in range(len(data)):
    for j in range(len(data[i])):
        check = data[i][j]
        print(check)
        if data[i][j] % 2 == 0:
            cout[i].append(data[i][j])      

print(cout)

其输出为

  

[[2,4,6,8],[2,4,6,8],[2,4,6,8]]

但我希望它成为

  

[[2],[4、6],[8]]

预先感谢

5 个答案:

答案 0 :(得分:1)

似乎您要从2D列表中提取偶数项。有很多方法可以做到这一点

使用2个for..in循环

data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
even = []

for block in data:
    tmp = []
    for x in block:
        if x % 2 == 0:
            tmp.append(x)
    even.append(tmp)

使用lambda函数

data = [[1,2,3], [4,5,6], [7,8,9]]
even = [list(filter(lambda x: x % 2 == 0, l)) for l in data]

输出

[[2], [4, 6], [8]]

答案 1 :(得分:0)

您好,欢迎来到Stackoverflow。

将cout的初始化更改为

cout = [[],[],[]]

除了这里的一些代码,如何调试代码

data = [[1,2,3], [4,5,6], [7,8,9]]
cout = [[],[],[]]
for i in range(len(data)):
    for j in range(len(data[i])):
        check = data[i][j]
        print("i =", i)
        print("j =",j)
        print(check)
        print(cout)
        if data[i][j] % 2 == 0:
            cout[i].append(check)      

print(cout)

答案 2 :(得分:0)

问题出在cout = [[]] * 3行中。这不是创建三个单独的列表,而是创建三个引用同一列表的对象。解决此问题的一种方法是编写cout = [[], [], []]cout = [[] for _ in range(3)]

不过,请检查其他答案,以更简洁地实现您要实现的目标。

答案 3 :(得分:0)

另一个内衬:

my_lists =  [[1,2,3], [4,5,6], [7,8,9]]
[l[(i+1)%2::2] for i, l in enumerate(my_lists)]
[[2], [4, 6], [8]]

答案 4 :(得分:0)

要从列表的子列表中过滤出不均匀的数字,可以使用嵌套的listcomps:

data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

[[i for i in l if not i % 2] for l in data]
# [[2], [4, 6], [8]]