Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 11, 2012 13:22:31

vkopey
От:
Зарегистрирован: 2010-09-26
Сообщения: 116
Репутация: +  3  -
Профиль   Отправить e-mail  

Помогите с рекурсивным поиском

# -*- coding: UTF-8 -*-
def findItem(value,item):
'''Ищет значение value в иерархическом списке item'''
if item==value:
print item
elif item.__class__.__name__=='list':
for child in item:
findItem(value, child)

s=[1,[21,22],3,[41,42],[51,52],6,7]
findItem(52,s)
Как сделать так чтоб функция findItem не печатала результат, а возвращала его через return ?

Ладно, пусть она возвращает логическое значение, но как это сделать?



Отредактировано (Фев. 11, 2012 13:44:55)

Офлайн

#2 Фев. 11, 2012 13:38:20

Piton23
От:
Зарегистрирован: 2011-10-17
Сообщения: 139
Репутация: +  5  -
Профиль   Отправить e-mail  

Помогите с рекурсивным поиском

Ниче не понял. Что значит возвращала результат? Ты проверяешь есть ли в данном списке элемент иль нет, и в идеале возвращать надо bool. Если ж тебе надо точный индекс элемента то это уже другой разговор (для данного примера что то типа ).

Отредактировано (Фев. 11, 2012 13:43:33)

Офлайн

#3 Фев. 11, 2012 14:06:43

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Помогите с рекурсивным поиском

А заменить print на return не пробовали?

Офлайн

#4 Фев. 11, 2012 14:14:11

vkopey
От:
Зарегистрирован: 2010-09-26
Сообщения: 116
Репутация: +  3  -
Профиль   Отправить e-mail  

Помогите с рекурсивным поиском

s0rg
А заменить print на return не пробовали?
Видает None, к сожалению.



Офлайн

#5 Фев. 11, 2012 15:14:45

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Помогите с рекурсивным поиском

Упс - не заметил что функция рекурсивная )
А что именно она должна вернуть?
Опишите задачу - так как если она должна вернуть то, что нашла, то мы ей это же самое передаем в первом аргументе )

Офлайн

#6 Фев. 11, 2012 15:26:58

vkopey
От:
Зарегистрирован: 2010-09-26
Сообщения: 116
Репутация: +  3  -
Профиль   Отправить e-mail  

Помогите с рекурсивным поиском

s0rg
Упс - не заметил что функция рекурсивная )
А что именно она должна вернуть?
Опишите задачу - так как если она должна вернуть то, что нашла, то мы ей это же самое передаем в первом аргументе )
Пусть пока возвращает то, что передаем в первом аргументе. Потом я переделаю как надо. Но проблема в том, что возвращает None, если заменить print на return. Как заставить ее возвращать то, что нашла?



Офлайн

#7 Фев. 11, 2012 15:37:03

Piton23
От:
Зарегистрирован: 2011-10-17
Сообщения: 139
Репутация: +  5  -
Профиль   Отправить e-mail  

Помогите с рекурсивным поиском

Если уж автор не хочет уточнять задание то ладно, как то так

def parse(value, item):
if item == value:
return item
elif item.__class__.__name__ == ‘list’:
for child in item:
item = parse(value, child)
if item:
return item

А возвращал у тебя None потому что функция по умолчанию выталкивает None если явно не указывать. В твоем случае когда заменял print->return
он возвращал в этой строке “findItem(value, child)” и терялось при дальнейших итерациях (Поэтому до самого верхнего уровня не доживает это)

Офлайн

#8 Фев. 11, 2012 15:51:24

vkopey
От:
Зарегистрирован: 2010-09-26
Сообщения: 116
Репутация: +  3  -
Профиль   Отправить e-mail  

Помогите с рекурсивным поиском

Piton23, s0rg, спасибо! )))
А то я уже начал подумывать о применении глобальных переменных…



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version