【问题标题】:Quick way of creating array of arrays given a bunch of arrays [duplicate]给定一堆数组[重复]创建数组数组的快速方法
【发布时间】:2020-04-02 19:29:50
【问题描述】:

想象以下数组:

list1 = [1, 2, 3, 4]
list2 = [5, 6, 7, 8]
list3 = [9, 10, 11, 12]
list4 = [13, 14, 15, 16]

我想组合数组,使其看起来像:

[[1, 5, 9, 13], [2, 6, 10, 14], [3, 7, 11, 15], [4, 8, 12, 16]]

有没有一种快速的方法可以将任意数量的数组和数组中的任意数量的元素转换为数组格式的数组?此外,假设 list1、2、3 和 4 没有以任何方式连接,所以我不能像这样循环:

for list in lists:
> finalArray.append(list[n])

我觉得这是一些矩阵操作,但我没有经常使用矩阵。有人可以指出我的方向吗?

【问题讨论】:

  • 这些是list 对象,而不是数组对象。无论如何,为什么会出现“未知数量的变量”?你是如何进入这个职位的。您应该能够从源代码中准确分辨出变量的数量。
  • 我的意思是说大量的变量。我相信我可以通过使用 len(array) 来获得长度。
  • 这些“未知数量的变量”从何而来?你创造了它们吗?在这种情况下,您应该首先创建一个列表列表。这种闻起来像 XY 问题——当问题真的出在其他地方时,你要求解决你认为是问题的事情。您能否更具体地了解这些变量的来源以及您在做什么?
  • 然后手动my_list = [list1, list2, ...]
  • @LouisYe 啊,我明白了。好的,但是,您仍然需要将这些列表放在一个列表或某个序列/可迭代的开头。然后你可以做final = [list(t) for t in zip(*list_of_lists)]。您正在寻找的矩阵术语是transpose。更简洁地说,也许是list(map(list, zip(*list_of_lists)))

标签: python list matrix transpose


【解决方案1】:

您永远不应该使用这种方法。可能有一个 hacky 解决方法,但 99.9% 的时间你会希望将它们预先存储在一个列表中。无论如何,您应该永远拥有未知数量的变量。如果用户正在输入数据,请将其存储在一个数组中以开始。如果这些数据是硬编码的,你应该知道会有多少。

【讨论】:

  • 我改成任意的
  • @LouisYe 您的代码中不应包含任意数量的变量。您应该使用 container,例如列表或字典。
  • @juanpa.arrivillaga 我将其更改为元素而不是变量。也许这就是混乱。我正在从 excel 文件中提取信息,并将它们从数据框格式中取出并将它们放入列表中。我有很多列表,每个列表都有很多元素。我只需要转置它。
  • @LouisYe 好吧,如果您使用的是数据框,您不妨转置数据框...df.T 无论如何,有一个链接副本,我在评论中复制了答案以上为方便起见
  • @LouisYe 您如何从 Excel 电子表格中提取未知数量的行,然后将它们分别分配给一个唯一命名的变量?
【解决方案2】:

你可以通过这种方式得到你的结果:

list1 = [1, 2, 3, 4]
list2 = [5, 6, 7, 8]
list3 = [9, 10, 11, 12]
list4 = [13, 14, 15, 16]
tot = [list1,list2,list3,list4]

要获得结果,您需要转置矩阵:

rez = [[tot[j][i] for j in range(len(tot))] for i in range(len(tot[0]))]

【讨论】:

  • 不,我希望 my_list 为 [[list1[0], list2[0], list3[0]...], [list1[1], list2[1], list3[1 ]...], ...]
  • 对不起,看错了,我编辑了我的答案,看来你需要转置矩阵
  • 这有一个zip 成语
猜你喜欢
  • 2016-02-13
  • 1970-01-01
  • 1970-01-01
  • 2014-11-17
  • 1970-01-01
  • 1970-01-01
  • 2014-11-14
  • 1970-01-01
  • 2015-12-03
相关资源
最近更新 更多