Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 26, 2011 12:32:25

michails
От:
Зарегистрирован: 2011-12-26
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Изменение значений в глубоковложенных объектах

Проблема следущая. Дан некоторый многоуровневый массив данных (например data=[1,2,3,[1,2,3,4,[1,2,3, ] ] ]). Число элементов и их тип произвольное. После выполнения какого-либо действия требуется изменить одно значение в этом массиве. “Путь” к значению, которое надо изменить задается списком(например массив соотдветсвует значению data).
Вопрос: как изменить нужное значение?



Офлайн

#2 Дек. 26, 2011 21:18:21

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Изменение значений в глубоковложенных объектах

>>> 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
Число элементов и их тип произвольное
вот эта часть вопроса непонятна - это могут быть не многоуровневые массивы?



Офлайн

#3 Дек. 27, 2011 03:07:40

FireOwl
От:
Зарегистрирован: 2011-12-27
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Изменение значений в глубоковложенных объектах

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 на целевой элемент с учетом возможной ошибки.



Офлайн

#4 Дек. 27, 2011 12:42:59

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2798
Репутация: +  185  -
Профиль   Отправить e-mail  

Изменение значений в глубоковложенных объектах

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



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано (Дек. 27, 2011 12:44:45)

Офлайн

#5 Дек. 28, 2011 13:46:25

michails
От:
Зарегистрирован: 2011-12-26
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Изменение значений в глубоковложенных объектах

Взможно я не очень понятно объяснил.

Изначально я эту проблему решил примерно также, как описал FireOwl .
Вопрос в другом: если более красивый способ выполнить такую операцию, кроме как обработать копию списка и затем переписать значение исходного списка.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version