[英]Appending to empty lists in list to transpose a matrix, only last value remains
这是问题:
spam=[[1,2,3,'a'],
[4,5,6,'b'],
[7,8,9,'c']]
for j in range(len(spam)):
for i in range(len(spam[0])):
bacon0=[[] for n in range(len(spam[0]))]
bacon0[i].append(spam[j][i])
我期望输出是这样的:
bacon0=[[1,4,7],[2,5,8],[3,6,9],['a','b','c']]
但我得到:
bacon0=[[],[],[],['c']]
我想转置矩阵,但不使用numpy
或zip()
。
您可以在内循环的每个迭代中重新创建bacon0
:
for j in range(len(spam)):
for i in range(len(spam[0])):
bacon0=[[] for n in range(len(spam[0]))]
每次都会替换以前的版本。 将其移出并在循环之前 :
bacon0 = [[] for n in range(len(spam[0]))]
for j in range(len(spam)):
for i in range(len(spam[0])):
演示:
>>> spam=[[1,2,3,'a'],
... [4,5,6,'b'],
... [7,8,9,'c']]
>>> bacon0 = [[] for n in range(len(spam[0]))]
>>> for j in range(len(spam)):
... for i in range(len(spam[0])):
... bacon0[i].append(spam[j][i])
...
>>> bacon0
[[1, 4, 7], [2, 5, 8], [3, 6, 9], ['a', 'b', 'c']]
zip()
将使这一过程变得更加简单,但是如果您真的不想使用它,至少可以看看使用enumerate()
并直接迭代来访问您的值:
bacon0 = [[] for _ in range(len(spam[0]))]
for row in spam:
for i, value in enumerate(row):
bacon0[i].append(value)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.