【问题标题】:Merge two arrays into an list of arrays将两个数组合并成一个数组列表
【发布时间】:2016-10-08 12:38:15
【问题描述】:

您好,我正在尝试使用 for 循环编译字典中的一堆数组,但我似乎找不到合适的解决方案。

基本上是我所拥有的简化形式:

dict['w1']=[1,2,3]
dict['w2']=[4,5,6]
dict['w3']=[7,8]

x = []
for i in range(3):
    x = np.concatenate([x],[dict['w'+str(i+1)].values],axis=0)

它提供了什么:

x = [1,2,3,4,5,6,7,8]

我想要什么:

x = [[1,2,3],[4,5,6],[6,7]]

我想使用 for 循环,因为我有太多要“编译”的数组,并且不能一一键入它们会非常低效。这样我可以使用创建的数组直接绘制箱线图。

存在一个类似的问题,没有循环要求,但仍然没有适当的解决方案。 Link

【问题讨论】:

  • 您将无法使用 numpy 数组实现该解决方案,所有列和行在 np.array 中的大小必须相同。话虽如此,您似乎混淆了 numpy 数组和 python 列表,它们并不相同,所以如果您只使用列表,请不要使用 numpy 函数(对数组有效)。
  • 预期 o/p 的最后一个元素必须是 [7,8],对吧?
  • 另外,我感觉到您希望避免问题的其他部分出现循环,除了这一行:"I want to use the for loop ..."。那里有错字?
  • 我正在删除duplicate; stackoverflow.com/questions/9285414/appending-to-a-nested-list 中的答案不如这里已经给出(并接受)的答案。

标签: python arrays python-3.x numpy jupyter


【解决方案1】:

理解:

# using name as "dict" is not proper use "_dict" otherwise.
dict['w1']=[1,2,3]
dict['w2']=[4,5,6]
dict['w3']=[7,8]

x = [dict["w"+str(i)] for i in range(1, 4)]

给出输出:

[[1, 2, 3], [4, 5, 6], [7, 8]]

【讨论】:

  • 这就像一个魅力!但我有个问题。我在字典中的键为'w01','w02'.......'w10'。因此,当它达到“10”值时会出现小问题。是否可以在您上面编写的代码中包含“if”?
  • 你可以在理解中使用条件,它会像[x1 for x1 in something if condition == True else x2]
【解决方案2】:

一种方法是根据键获取 argsort 索引,并使用这些索引对字典中的元素/值进行排序,如下所示 -

np.take(dict.values(),np.argsort(dict.keys()))

如果您需要一个列表作为输出,请添加.tolist()

示例运行 -

In [84]: dict
Out[84]: {'w1': [4, 8, 2, 1], 'w2': [1, 3, 8], 'w3': [3, 2]}

In [85]: np.take(dict.values(),np.argsort(dict.keys()))
Out[85]: array([[4, 8, 2, 1], [1, 3, 8], [3, 2]], dtype=object)

In [86]: np.take(dict.values(),np.argsort(dict.keys())).tolist()
Out[86]: [[4, 8, 2, 1], [1, 3, 8], [3, 2]]

【讨论】:

    【解决方案3】:

    只需append 列表中的项目。请注意,顺便说一句,range0 开头,如果您未指定起始值并将结束值视为独占边框:

    x = []
    for i in range(1, 4):
        x.append(dict['w' + str(i)])
    

    【讨论】:

      【解决方案4】:

      如果您指的是列表而不是字典,那么您正在寻找 zip 命令。

      邮编 (w1,w2,w3)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-02-04
        • 2021-07-16
        • 1970-01-01
        • 2023-03-26
        • 2011-09-26
        • 1970-01-01
        • 2020-01-26
        相关资源
        最近更新 更多