在循环中创建多维python列表

我尝试在python 3.7中创建多维数组。不幸的是,我事先不知道变量类型,尺寸或数量。到目前为止,我的方法是循环:

dimensions = [3,3]
vartype = 'binary'

if vartype=='binary':
    new_array=False
elif vartype=='int':
    new_array=0

for dim in dimensions:
    new_array = [new_array for _ in range(dim)]

问题是,如果存在多个维度,则我最终会引用第一个维度:

new_array[0][1]=True
print(new_array)

[[False,True,False],[False,False]]

类似here这样的问题已经解决了很多次。但是,在其他情况下,尺寸的数量是已知的,因此我无法将解决方案转移到我的问题上。 有谁知道一种创建尺寸可变的数组的方法吗?

hanbaoling76 回答:在循环中创建多维python列表

您可以使用以下事实:boolint的构造函数在不带参数(即bool() is Falseint() == 0的情况下调用时,将返回这些数据类型的默认值。

要使事物在任何数量的维度上通用,可以使用一些巧妙的递归...

def make_array(dimension,element_ctor):
    return [element_ctor() for x in range(dimension)]


def make_ndim_array(dimensions,element_ctor):
    return make_array(
        dimensions[0],(
            element_ctor
            if len(dimensions) == 1
            else lambda: make_ndim_array(dimensions[1:],element_ctor)
        ),)


print(make_ndim_array([2,3,4],int))
print(make_ndim_array([3,3],str))

输出

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

由于element_ctor可以是任何不带参数即可调用的函数,因此您甚至可以将其用于n维随机数数组...

import random
print(make_ndim_array([2,4,11],random.random))
,
import copy

for dim in dimensions:
    new_array = [copy.deepcopy(new_array) for _ in range(dim)]
本文链接:https://www.f2er.com/3157863.html

大家都在问