如何创建任意深度 D 的嵌套列表,其中每个条目包含 D-1 个列表
How to create a nested list of arbitrary depth, D, in which each entry contains D-1 lists
假设我从 initial_list = [None] * 4
列表开始。通过设置 depth = D
,我如何定义一个例程来创建任意深度的嵌套列表,使得第一个列表的每个条目都包含 x-1
个级别,每个级别本身就是其他 4 个元素的列表.之后允许切片数据的东西,例如 myPrecious[0][0][3][0]
,myPrecious[3][2][1][0]
,... ?
您可以在循环中使用列表理解:
import copy
def build_list(depth, nb_per_level, fill=0):
l = [fill for _ in range(nb_per_level)]
for _ in range(depth):
l = [copy.deepcopy(l) for _ in range(nb_per_level)]
return l
>>> build_list(2, 3, 7)
[[[7, 7, 7], [7, 7, 7], [7, 7, 7]], [[7, 7, 7], [7, 7, 7], [7, 7, 7]], [[7, 7, 7], [7, 7, 7], [7, 7, 7]]]
>>> build_list(1, 5, 7)
[[7, 7, 7, 7, 7], [7, 7, 7, 7, 7], [7, 7, 7, 7, 7], [7, 7, 7, 7, 7], [7, 7, 7, 7, 7]]
>>> build_list(0, 5, 7)
[7, 7, 7, 7, 7]
>>> my_precious = build_list(3, 4, 7)
>>> my_precious[3][2][1][0]
7
请注意 copy.deepcopy(l)
在列表理解中的重要性,而不仅仅是 l
,它会复制列表而不是重复使用相同的列表。关于不进行深层复制的危险的相关问题:List of lists changes reflected across all lists unexpectedly?
假设我从 initial_list = [None] * 4
列表开始。通过设置 depth = D
,我如何定义一个例程来创建任意深度的嵌套列表,使得第一个列表的每个条目都包含 x-1
个级别,每个级别本身就是其他 4 个元素的列表.之后允许切片数据的东西,例如 myPrecious[0][0][3][0]
,myPrecious[3][2][1][0]
,... ?
您可以在循环中使用列表理解:
import copy
def build_list(depth, nb_per_level, fill=0):
l = [fill for _ in range(nb_per_level)]
for _ in range(depth):
l = [copy.deepcopy(l) for _ in range(nb_per_level)]
return l
>>> build_list(2, 3, 7)
[[[7, 7, 7], [7, 7, 7], [7, 7, 7]], [[7, 7, 7], [7, 7, 7], [7, 7, 7]], [[7, 7, 7], [7, 7, 7], [7, 7, 7]]]
>>> build_list(1, 5, 7)
[[7, 7, 7, 7, 7], [7, 7, 7, 7, 7], [7, 7, 7, 7, 7], [7, 7, 7, 7, 7], [7, 7, 7, 7, 7]]
>>> build_list(0, 5, 7)
[7, 7, 7, 7, 7]
>>> my_precious = build_list(3, 4, 7)
>>> my_precious[3][2][1][0]
7
请注意 copy.deepcopy(l)
在列表理解中的重要性,而不仅仅是 l
,它会复制列表而不是重复使用相同的列表。关于不进行深层复制的危险的相关问题:List of lists changes reflected across all lists unexpectedly?