在列表的层次结构后用索引(长度更改)放置列表以更改值

问题描述 投票:0回答:2

我具有以下列表层次结构:

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 

这是不可能的,因为index1index2是列表。

我该如何解决?

python list hierarchy indices
2个回答
0
投票
这可能是一个错误的设计...。但是,您可以像这样反复迭代到子列表中:

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]]]


0
投票
我的最初想法与Patrick所建议的相同,虽然可以解决问题,但似乎有些奇怪。您是否考虑过使用numpy数组?如果这是一个选择,那么它可能会使您的生活更轻松。然后,您可以执行以下操作:

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允许使用列表进行索引)。
© www.soinside.com 2019 - 2024. All rights reserved.