繁体   English   中英

追加到列表中的空列表以转置矩阵,仅保留最后一个值

[英]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']]

我想转置矩阵,但不使用numpyzip()

您可以在内循环的每个迭代中重新创建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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM