【问题标题】:Dynamic save of Multidimensional Array Elements alternately by position in Python [closed]在Python中按位置交替动态保存多维数组元素[关闭]
【发布时间】:2021-08-03 16:08:16
【问题描述】:

我有一个多维数组:

   array =  [[900, 650, 0, 0, 2, 1, 24, 3, 4, 25, 0, 29, 407, 268, 565, 54, 3, 1, 1, 0, 3, 1], [1001, 7062, 0, 0, 0, 1, 20, 3, 4, 26, 0, 0, 0, 0, 0, 50, 0, 0, 0, 2, 0, 1]]

我想交替保存这个二维,所以第一个数组的第一个元素,第二个数组的第一个元素,第一个数组的第二个元素,第二个数组的第二个元素和很快.. 如何动态解决这个问题?在这种情况下,独立于由 2 个数组组成吗?假设我在这个列表中有 3 个数组。我想要第一个数组的第一个元素,第二个数组的第一个元素,第三个数组的第一个元素,第一个数组的第二个元素等等.. 逻辑:

array[firstArray][firstElement]
array[secondArray][firstElement]
array[thirdArray][firstElement]
array[firstArray][secondElement]
array[secondArray][secondElement]
array[thirdArray][secondElement]

....

我尝试了 2 个 for 循环,但出现 index out of out of range 错误。

【问题讨论】:

  • “我尝试了 2 个 for 循环,但出现 index out ouf range 错误。”:将您的代码显示为 minimal reproducible example。询问有关您的代码的具体问题。没有您的代码,您似乎正在让互联网为您完成工作,这并不好。 How to Ask; question checklist

标签: python arrays multidimensional-array


【解决方案1】:

希望我理解正确。您需要一个二维数组中的另一个一维数组。我可以为您提供此代码(我可能犯了错误,因为我是在电话上写的)。参数A 是您的数组中有多少个数组:

def onearray(array, a):
    z = 0
    n = 0
    while sum([len(array[i]) for i in range(a)]) < n:
        for i in range(a):
            if len(array[i]) > z:
                newarray.append(array[i][z])
                n += 1
        z += 1
    return newarray

【讨论】:

    【解决方案2】:

    这正是[Python.Docs]: Built-in Functions - zip(*iterables)的目的:

    >>> from pprint import pprint as pp
    >>>
    >>> arr = [[900, 650, 0, 0, 2, 1, 24, 3, 4, 25, 0, 29, 407, 268, 565, 54, 3, 1, 1, 0, 3, 1], [1001, 7062, 0, 0, 0, 1, 20, 3, 4, 26, 0, 0, 0, 0, 0, 50, 0, 0, 0, 2, 0, 1]]  # Your array
    >>>
    >>> transp = [list(i) for i in zip(*arr)]
    >>>
    >>> pp(transp)
    [[900, 1001],
     [650, 7062],
     [0, 0],
     [0, 0],
     [2, 0],
     [1, 1],
     [24, 20],
     [3, 3],
     [4, 4],
     [25, 26],
     [0, 0],
     [29, 0],
     [407, 0],
     [268, 0],
     [565, 0],
     [54, 50],
     [3, 0],
     [1, 0],
     [1, 0],
     [0, 2],
     [3, 0],
     [1, 1]]
    >>>
    >>> arr0 = [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 0, 1]]  # Demo array
    >>>
    >>> transp0 = [list(i) for i in zip(*arr0)]
    >>>
    >>> pp(transp0)
    [[0, 4, 8], [1, 5, 9], [2, 6, 0], [3, 7, 1]]
    

    【讨论】:

    • 非常感谢你!我不知道这个 zip 功能。我使用它并创建了元组。但是我需要一个数组而不是元组,所以我将元组转换为一个数组。谢谢!
    • 如果它是一个元组列表,那就更简单了:[i for i in zip(*arr)]。不客气!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多