Уведомления

Группа в Telegram: @pythonsu

#1 Март 17, 2010 12:00:22

Sher-Khan
От:
Зарегистрирован: 2009-10-14
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

замена ссылок в списке на их значения

Доброго дня уважаемые

Возникла следующая проблема
есть список формируемый приблизительно следующим образом

a = 3
b = 4
lst = [a, b, a]
из этого списка надо получить новый в котором элементы будут не зависимы
те если я сделаю lst=10 то lst останется равным 3

Заранее благодарю



Офлайн

#2 Март 17, 2010 12:09:48

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

замена ссылок в списке на их значения

Не совсем понятно, чего именно Вы хотите

>>> a = 3
>>> b = 4
>>> lst = [a, b, a]
>>> lst
[3, 4, 3]
>>> lst[0] = 10
>>> lst
[10, 4, 3]



Офлайн

#3 Март 17, 2010 12:39:46

Sher-Khan
От:
Зарегистрирован: 2009-10-14
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

замена ссылок в списке на их значения

извиняюсь не правильно сформулировал задачу это происходит только если a и b списки

вот

In [29]: a=[2,4]
In [30]: b=[5,8]
In [31]: lst=[a,b,a]
In [32]: lst
Out[32]: [[2, 4], [5, 8], [2, 4]]
In [33]: lst[0][0]+=5
In [34]: lst
Out[34]: [[7, 4], [5, 8], [7, 4]]



Офлайн

#4 Март 17, 2010 12:46:09

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

замена ссылок в списке на их значения

В этом случае вам нужно третьим значением передавать ссылку не на а, а на его копию.

from copy import copy
>>> a = [2,4]
>>> b = [5,8]
>>> lst = [a,b,copy(a)]
>>> lst[0][0]+=5
>>> lst
[[7, 4], [5, 8], [2, 4]]



Офлайн

#5 Март 17, 2010 13:04:50

Sher-Khan
От:
Зарегистрирован: 2009-10-14
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

замена ссылок в списке на их значения

Это я понимаю но дело в том что те списки формируются в другом модуле в который мне лезть не хотелось бы
я хочу просто разобрать на на независимые части полученный список



Офлайн

#6 Март 17, 2010 13:23:24

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

замена ссылок в списке на их значения

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

>>> a = [1,2]
>>> b = [3,4]
>>> lst = [a,b,a]
>>> lst2 = [copy(i) for i in lst]
>>> lst2
[[1, 2], [3, 4], [1, 2]]
>>> lst2[0][0]+=4
>>> lst2
[[5, 2], [3, 4], [1, 2]]



Офлайн

#7 Март 17, 2010 13:33:38

Sher-Khan
От:
Зарегистрирован: 2009-10-14
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

замена ссылок в списке на их значения

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



Офлайн

#8 Март 17, 2010 13:59:11

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

замена ссылок в списке на их значения

Sher-Khan
походу придется делать так я просто думал, что есть какой-нибудь встроенный метод
вместо copy можно
ls2 = ls[:]
это “поверхностная” копия, а deepcopy копируют вложенные структуры



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Отредактировано (Март 17, 2010 14:00:12)

Офлайн

#9 Март 17, 2010 14:09:24

Sher-Khan
От:
Зарегистрирован: 2009-10-14
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

замена ссылок в списке на их значения

Спосибо



Офлайн

#10 Март 17, 2010 14:26:24

Sher-Khan
От:
Зарегистрирован: 2009-10-14
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

замена ссылок в списке на их значения

PooH
Sher-Khan
походу придется делать так я просто думал, что есть какой-нибудь встроенный метод
вместо copy можно
ls2 = ls[:]
это “поверхностная” копия, а deepcopy копируют вложенные структуры
а нет не прокатило всеравно остается ссылка на первоначальный обект и он тоже изменяется



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version