Форум сайта python.su
3
# -*- 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)
Отредактировано (Фев. 11, 2012 13:44:55)
Офлайн
5
Ниче не понял. Что значит возвращала результат? Ты проверяешь есть ли в данном списке элемент иль нет, и в идеале возвращать надо bool. Если ж тебе надо точный индекс элемента то это уже другой разговор (для данного примера что то типа ).
Отредактировано (Фев. 11, 2012 13:43:33)
Офлайн
25
А заменить print на return не пробовали?
Офлайн
3
s0rgВидает None, к сожалению.
А заменить print на return не пробовали?
Офлайн
25
Упс - не заметил что функция рекурсивная )
А что именно она должна вернуть?
Опишите задачу - так как если она должна вернуть то, что нашла, то мы ей это же самое передаем в первом аргументе )
Офлайн
3
s0rgПусть пока возвращает то, что передаем в первом аргументе. Потом я переделаю как надо. Но проблема в том, что возвращает None, если заменить print на return. Как заставить ее возвращать то, что нашла?
Упс - не заметил что функция рекурсивная )
А что именно она должна вернуть?
Опишите задачу - так как если она должна вернуть то, что нашла, то мы ей это же самое передаем в первом аргументе )
Офлайн
5
Если уж автор не хочет уточнять задание то ладно, как то так
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)” и терялось при дальнейших итерациях (Поэтому до самого верхнего уровня не доживает это)
Офлайн
3
Piton23, s0rg, спасибо! )))
А то я уже начал подумывать о применении глобальных переменных…
Офлайн