到目前为止,我的大学作业看起来像这样:
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]]
预先感谢
答案 0 :(得分:1)
似乎您要从2D列表中提取偶数项。有很多方法可以做到这一点
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]]