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