这是问题:
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()
。
答案 0 :(得分:0)
您在内循环的每次迭代中重新创建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)