使用任意长度索引

时间:2019-04-16 17:44:11

标签: python python-3.x list nested

我有一些列表和值以任意深度相互嵌套。

nested = [
    3,
    [1, 4, 2],
    [3, [5], 6, 7, [5]],
    [3],
    [[1, 1],[2, 2]]
]

我正在尝试在此嵌套混乱中设置一个值 使用任意长的索引。

示例索引:

index = (2, 1)

因此在示例索引处设置一个项目:

nested[2][1] = new_value

如果我们知道索引的长度,我们可以:

nested[index[0]][index[1]] = new_value

问题在于索引不是设置的长度!

我想出了如何获取任意长度索引的值:

def nested_get(o, index):
    if not index:
        return o

    return nested_get(o[index[0]], index[1:])

我知道numpy数组可以做到这一点:np_array[index] = new_value

我该如何实现一个使用纯Python进行类似操作的函数?类似于nested_get,但用于设置值。

1 个答案:

答案 0 :(得分:1)

您可以使用递归功能进行操作:

def nested_set(x, index, value):
    if isinstance(index, int):
        x[index] = value
        return
    elif len(index) == 1:
        x[index[0]] = value
        return
    nested_set(x[index[0]], index[1:], value)

很可能存在比列表更好的数据结构。