Задание элемента во вложенном списке с использованием индекса произвольной длины - PullRequest
1 голос
/ 16 апреля 2019

У меня есть несколько списков и значений, вложенных друг в друга с произвольной глубиной.

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

Как я могу реализовать функцию, которая делает что-то подобное, но с чистым питоном? Что-то вроде nested_get, но для установки значения.

1 Ответ

1 голос
/ 16 апреля 2019

Вы могли бы что-то сделать с помощью рекурсивной функции:

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)

Вероятно, есть какая-то лучшая структура данных, чтобы делать то, что вы хотите, чем списки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...