Найти - Пользователи
Полная версия: Изменение значений в глубоковложенных объектах
Начало » Python для новичков » Изменение значений в глубоковложенных объектах
1
michails
Проблема следущая. Дан некоторый многоуровневый массив данных (например data=[1,2,3,[1,2,3,4,[1,2,3, ] ] ]). Число элементов и их тип произвольное. После выполнения какого-либо действия требуется изменить одно значение в этом массиве. “Путь” к значению, которое надо изменить задается списком(например массив соотдветсвует значению data).
Вопрос: как изменить нужное значение?
doza_and
>>> a=[1,2,3,[1,2,3,4,[1,2,3,[1,2] ] ] ]
>>> a
[1, 2, 3, [1, 2, 3, 4, [1, 2, 3, [1, 2]]]]
>>> a[3][0]=55
>>> a
[1, 2, 3, [55, 2, 3, 4, [1, 2, 3, [1, 2]]]]
michails
Число элементов и их тип произвольное
вот эта часть вопроса непонятна - это могут быть не многоуровневые массивы?
FireOwl
a = [1,1,[3,[1,2,3]],1,1,1]
b = [4,1,2]

d = a
for c in b:
if type(d)==list:
d = d[c]
else: break
print(d)
Можно так. Произвольный список номеров хранится в b, цикл пробегается по списку данных а (тоже произвольному) и адресует переменную d на целевой элемент с учетом возможной ошибки.
Rodegast
doza_and уже про это написал, но тем не менее:

>>> data=[1,2,3,[1,2,3,4,[1,2,3,[1,2] ] ] ]
>>> doroga = [3,4,1]
>>> data[doroga[0]][doroga[1]][doroga[2]]
2
>>> data[doroga[0]][doroga[1]][doroga[2]] = 5
>>> data[doroga[0]][doroga[1]][doroga[2]]
5
>>> data
[1, 2, 3, [1, 2, 3, 4, [1, 5, 3, [1, 2]]]]
michails
Взможно я не очень понятно объяснил.

Изначально я эту проблему решил примерно также, как описал FireOwl .
Вопрос в другом: если более красивый способ выполнить такую операцию, кроме как обработать копию списка и затем переписать значение исходного списка.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB