如何在 python 中创建可变维度的多维列表?

How to create a multidimensional list of a variable amount of dimensions in python?

我正在尝试创建一个函数,该函数将制作一个多维列表,该列表采用输入数字来选择列表的维数。到目前为止,这是我的代码:

def createMultiDimList(dimensions, currentDim=0, output=[]):
    if currentDim < dimensions:
        output.append([])
        currentDim += 1
        createMultiDimList(dimensions, currentDim, output[0])
        return output
    else:
        return output

我认为这不起作用,因为递归只是放入一维列表,但我不确定。

你把它复杂化了 IMO。递归背后的一般思想是首先解决最简单的情况,然后 return 根据逐渐简单的情况解决更困难的情况的结果。

对于此函数,“简单情况”是一维列表 []。更简单的情况是 n 维列表是列表内部的 n-1 维列表。因此:

>>> def n_dim_list(n: int) -> list:
...     if n == 1:
...         return []
...     return [n_dim_list(n-1)]
...
>>> n_dim_list(4)
[[[[]]]]

如果你想让它复杂一点,让它成为一个更有趣的递归例子,你可以为一维列表定义一个填充值和每个列表的长度:

>>> def n_dim_list(n: int, length: int = 0, value = None) -> list:
...     if n == 1:
...         return [value] * length
...     return [n_dim_list(n-1, length, value) for _ in range(length or 1)]
...
>>> n_dim_list(4)
[[[[]]]]
>>> n_dim_list(4, 2, 0)
[[[[0, 0], [0, 0]], [[0, 0], [0, 0]]], [[[0, 0], [0, 0]], [[0, 0], [0, 0]]]]

正如@Samwise 明智地说的那样,您已经像他一样简化了很棒的方法,专门针对您的问题, 您需要发送嵌套列表而不是附加项目并返回它:

def createMultiDimList(dimensions, currentDim=0, output=[]):
    if currentDim < dimensions:
        currentDim += 1
        createMultiDimList(dimensions, currentDim, [output])
        return output
    else:
        return output