Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 1, 2011 21:33:33

zeb
От:
Зарегистрирован: 2011-02-01
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск во вложенных списках

доброго времени суток
может быть я пытаюсь применить какие то вещи которые тут инародны но вот столкнулся с такой непоняткой

d={} #словарь
d[1]=[] #в словаре храниться список
d[1].append([2,3,4])
а теперь задача
как мне узнать что в d внутри входит цифра 3.
т.е если проверять
3 in d[1]:
то не получиться ибо в d
лежит список списков т.е в нем []
как добравться вглубь?



Офлайн

#2 Фев. 1, 2011 21:39:24

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

Поиск во вложенных списках

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

Делайте не

d[1].append([2,3,4])
а
d[1] += [2,3,4]



Офлайн

#3 Фев. 1, 2011 21:46:46

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Поиск во вложенных списках

regall
d +=
да блин, к своему стыду, я никогда так не делал, проходился по привычке как дурак циклом :(



Офлайн

#4 Фев. 2, 2011 04:04:48

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Поиск во вложенных списках

>>> la = []
>>> la.extend((1, 2, 3))
>>> la
[1, 2, 3]
>>> la.extend((1, 2, 3))
>>> la
[1, 2, 3, 1, 2, 3]
>>>
по timeit получается медленнее, чем +=

zeb
как добравться вглубь?
3 in d[1][0]



Офлайн

#5 Фев. 2, 2011 13:55:14

zeb
От:
Зарегистрирован: 2011-02-01
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск во вложенных списках

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



Офлайн

#6 Фев. 2, 2011 14:14:29

alexx11
От:
Зарегистрирован: 2010-05-13
Сообщения: 208
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск во вложенных списках

zeb d?



Офлайн

#7 Фев. 2, 2011 18:06:26

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Поиск во вложенных списках

Если потенциально там несколько списков, то проверять только один мало будет.
Наверное лучше так:

[1 for i in d[1] if 3 in i]



Офлайн

#8 Фев. 3, 2011 03:01:49

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Поиск во вложенных списках

zeb
а в нем содержиться список каждый член которого класс. и мне надо добраться до поля класса.
а может объект ?
потому что "d.append()“ - это добавление в список объекта
тебе посоветовали, что если у тебя такая ситуация, то храни в виде ”{1: , 2: }“
если же у тебя там не просто цифры ”{1: [, , 3], 2: }", то это делается через d
а проверка на наличие - через "'a' in d"

все эти пробелы от незнания базовых типов



Отредактировано (Фев. 3, 2011 03:04:40)

Офлайн

#9 Фев. 3, 2011 10:29:25

zeb
От:
Зарегистрирован: 2011-02-01
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск во вложенных списках

хитро т.е не делать класс инкапсулирующий данные об обьекте а хранить это в трехмерном списке. в принципе тоже способ.
однако на вопрос поставленный в топике так ни кто и не ответил. вопрос был как добраться до переменной уже лежащей в некой структуре а не в том как изменить эту структуру что бы можно было добраться.



Офлайн

#10 Фев. 4, 2011 21:06:28

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

Поиск во вложенных списках

чтото я совсем не пойму почему вас не устраивает то что предлагают

class Tv:
def __init__(self):
self.a=1
d={} #словарь
d[1]=[] #в словаре храниться список
d[1].append(Tv())
print d[1][0].a



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version