【问题标题】:Generate multiple arrays simultaniously in python在python中同时生成多个数组
【发布时间】:2017-10-09 07:46:54
【问题描述】:

假设amount是数组的数量,b是数组的长度。我不知道如何填写这个

def MultiList(amount,length)

如果我调用 MultiList 之类的函数,我想这样做

MultiList(5,5)

你的输出将是

(array ([0,0,0,0,0]), array ([0,0,0,0,0]), array ([0,0,0,0,0]), array ([0,0,0,0,0]),array ([0,0,0,0,0]))

【问题讨论】:

  • 你只是在列表列表之后?
  • tuple(np.zeros(length) for _ in range(amount))?
  • 如果您使用的是 NumPy,请参考 Md. Rezwanul Haque 的答案(或来自 @Goyo 的评论)。如果您的意思是内置列表,请选择 RomanPerekhrest 或我的答案。
  • @ElmoVanKielmo 谢谢,看看有什么可能的解决方案吗?
  • 你已经有 4 个答案了。它们都给出了一个列表/数组,其中包含amount 数量的列表/数组,其中填充了length 的零个数。他们都回答了你的问题。您只需要说明您使用的是内置列表还是 NumPy 数组,因为 Python 中没有 array 内置类型(有 list 类型)并且您没有提到 NumPy 类型 array 存在的地方,所以我们有点困惑。

标签: python arrays function


【解决方案1】:

对于您的简单案例:

def gen_multi_list(amount, length, value=0):
    return [[value]*length for _ in range(amount)]

print(gen_multi_list(5,5))

输出:

[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

【讨论】:

  • 您可以添加 lambda 版本:gen_multi_list = lambda amount, length, value=0: [[value]*length for _ in range(amount)] 用于单行。
【解决方案2】:

您可以使用numpy tuple 来执行此任务。

import numpy as np
def multilist(amount, length):
    return tuple(np.zeros(length, dtype=np.int) for _ in range(amount))
print(multilist(5,5))

输出:

(array([0, 0, 0, 0, 0]), array([0, 0, 0, 0, 0]), array([0, 0, 0, 0, 0]), array([0, 0, 0, 0, 0]), array([0, 0, 0, 0, 0]))

【讨论】:

    【解决方案3】:

    您可以在函数中使用连续循环来创建多个数组。创建列表列表,然后将其转换为元组,因为我们想要像输出一样的元组。

    def Multilist(amount, length):
        tup = [];
        for i in range(amount):
            arr = []
            for j in range(length):
                arr.append(0)
            tup.append(arr)
        return tuple(tup)
    print(Multilist(5,5))
    

    输出:

    ([0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0])
    

    【讨论】:

    • 请添加一些解释。
    【解决方案4】:
    Multilist = lambda amount, length : tuple([[0]*amount ]*length)
    print(Multilist(5,5))
    

    输出: ([0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0])

    【讨论】:

    • 我喜欢 lambda 方法,但使用 []*times 有问题。请尝试以下操作:m = Multilist(3,3)print(m)m[0][1] = 1print(m)。第二次打印是([0, 1, 0], [0, 1, 0], [0, 1, 0])
    • @ElmoVanKielmo lambda 在 Python 3 中删除了吗?你能提供一个链接吗? Python 3.5 支持 lambda 函数。
    • @ElmoVanKielmo 我知道原因,您的解决方案也有副作用。我只是向可能不知道它的用户展示它。
    • 好的@Adirio 在我在这里写任何东西之前我需要一杯咖啡。特别是关于 lambdas ......我知道我的代码有同样的问题。这与def foo(bar=[]) 的原因相同。 def foo(bar=None) 更好。谢谢。
    • Multilist = lambda amount, length, value=0: tuple([[value]*length for _ in range(amount)]) 是一个单行,甚至可以提供不同的默认参数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    • 2018-09-13
    • 1970-01-01
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多