我具有以下列表层次结构:
boundaries = [[0, 1, 2, 3, 4], [[5, 6, 7, 8, 9], [[0, 4, 8, 7], [4, 3, 9, 8]]],
[[2, 1, 6, 5]], [[1, 0, 7, 6]]]
带有索引的两个列表:
index1 = [1, 0, 2] # is the same as [1][0][2]
index2 = [1, 1, 0, 1] # is the same as [1][1][0][1]
但是,当我尝试执行以下描述时,它不起作用。
boundaries[index1] = 45
boundaries[index2] = 45
这是不可能的,因为index1
和index2
是列表。
我该如何解决?
boundaries = [[0, 1, 2, 3, 4], [[5, 6, 7, 8, 9], [[0, 4, 8, 7], [4, 3, 9, 8]]],
[[2, 1, 6, 5]], [[1, 0, 7, 6]]]
index1 = [1, 0, 2] # is the same as [1][0][2]
index2 = [1, 1, 0, 1] # is the same as [1][1][0][1]
def iterateively_descent(idx, l, val):
# iteratively descent until the last sublist
for k in idx[:-1]:
l = l[k]
# set the value of the last sublist
l[idx[-1]] = val
print(boundaries)
iterateively_descent(index1,boundaries,45)
print(boundaries)
iterateively_descent(index2,boundaries,145)
print(boundaries)
输出:
[[0, 1, 2, 3, 4], [[5, 6, 7, 8, 9], [[0, 4, 8, 7], [4, 3, 9, 8]]], [[2, 1, 6, 5]], [[1, 0, 7, 6]]] [[0, 1, 2, 3, 4], [[5, 6, 45, 8, 9], [[0, 4, 8, 7], [4, 3, 9, 8]]], [[2, 1, 6, 5]], [[1, 0, 7, 6]]] [[0, 1, 2, 3, 4], [[5, 6, 45, 8, 9], [[0, 145, 8, 7], [4, 3, 9, 8]]], [[2, 1, 6, 5]], [[1, 0, 7, 6]]]
import numpy as np
boundaries = np.array([[[1, 2, 3], [4, 5, 6], [7, 8, 9]]])
index = (0, 1, 1)
print("Before:")
print(boundaries)
boundaries[index] = 42
print("After: ")
print(boundaries)
输出将是:
Before: [[[1 2 3] [4 5 6] [7 8 9]]] After: [[[ 1 2 3] [ 4 42 6] [ 7 8 9]]]
这里的主要区别是您需要安装numpy(不确定是否可以选择),并且索引必须为元组(我不认为numpy允许使用列表进行索引)。