我如何访问第 n 个嵌套列表,我知道嵌套列表的深度吗?
How do I access the nth nested list, were I know the depth of nested lists?
在一般情况下,我使用嵌套循环的可变深度对嵌套列表中的数据点进行分类,例如在一个简单的情况下:
alist = [ [[a, b], [c, d]], [[e, f], [g, h]] ]
我用它来进行括号之类的操作,例如:
min ([ max([a, b]), max([c,d]) ])
然而,我遇到的问题是,在我的示例中,我引用了 [a, b] 和 [c, d],但我想将它们引用为列表的变量或索引,如果我们有一个已知的嵌套列表的深度和最深嵌套括号中元素的已知数量。
根据我对使用列表索引的了解,我看不出如何在嵌套中引用 nth 深度列表。如果我想引用第三个嵌套列表,我必须明确地写:
nlist[0][0][i]
因此,如果深度发生变化,我将无能为力。
您需要了解的不仅仅是深度。就像在你的最后一个例子中一样,你需要有 3 个值:0, 0, i.
在一般情况下,您需要知道 n 个索引。
因此您可以编写一个小的辅助函数,将这些索引作为参数:
def deep_get(lst, *indices):
for i in indices:
lst = lst[i]
return lst
现在,如果您有一个列表 indices
,您可以:
indices = [0, 0, i]
# ...
# ...
print(deep_get(lst, *indices))
设置
如果您需要设置一个值而不是获取它,那么使用这个函数:
def deep_set(lst, value, *indices):
for i in indices[:-1]:
lst = lst[i]
lst[indices[-1]] = value
呼叫为:
indices = [0, 0, i]
# ...
# ...
newValue = 9
print(deep_set(lst, newValue, *indices))
在一般情况下,我使用嵌套循环的可变深度对嵌套列表中的数据点进行分类,例如在一个简单的情况下:
alist = [ [[a, b], [c, d]], [[e, f], [g, h]] ]
我用它来进行括号之类的操作,例如:
min ([ max([a, b]), max([c,d]) ])
然而,我遇到的问题是,在我的示例中,我引用了 [a, b] 和 [c, d],但我想将它们引用为列表的变量或索引,如果我们有一个已知的嵌套列表的深度和最深嵌套括号中元素的已知数量。
根据我对使用列表索引的了解,我看不出如何在嵌套中引用 nth 深度列表。如果我想引用第三个嵌套列表,我必须明确地写:
nlist[0][0][i]
因此,如果深度发生变化,我将无能为力。
您需要了解的不仅仅是深度。就像在你的最后一个例子中一样,你需要有 3 个值:0, 0, i.
在一般情况下,您需要知道 n 个索引。
因此您可以编写一个小的辅助函数,将这些索引作为参数:
def deep_get(lst, *indices):
for i in indices:
lst = lst[i]
return lst
现在,如果您有一个列表 indices
,您可以:
indices = [0, 0, i]
# ...
# ...
print(deep_get(lst, *indices))
设置
如果您需要设置一个值而不是获取它,那么使用这个函数:
def deep_set(lst, value, *indices):
for i in indices[:-1]:
lst = lst[i]
lst[indices[-1]] = value
呼叫为:
indices = [0, 0, i]
# ...
# ...
newValue = 9
print(deep_set(lst, newValue, *indices))