Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 8, 2012 10:14:10

cska63
Зарегистрирован: 2012-10-08
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Обход вложенных списков

Добрый день!!!
У меня имеется список
my_list = [['define', , ['if', , ‘1’, ['*', ‘n’, ['fac', ]]]]]
И мне необходимо пройтись по этому списку и вывести его вот так.
define fac n
___if zero? n
______1
______* n fac - n 1

Подскажите, пожалуйста, как это сделать!!

Отредактировано cska63 (Окт. 8, 2012 10:15:08)

Офлайн

#2 Окт. 8, 2012 10:31:15

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Обход вложенных списков

А откуда такой список взялся?



Офлайн

#3 Окт. 8, 2012 10:50:21

cska63
Зарегистрирован: 2012-10-08
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Обход вложенных списков

FishHook
А откуда такой список взялся?
my_list= str(nestedExpr('(', ‘)’).parseString(txt))

Офлайн

#4 Окт. 8, 2012 20:54:52

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

Обход вложенных списков

Может мой велосипед вам поможет?

import numpy as np
def IterFlatten(iterable):
    u"""итератор по вложенным перечисляемым объектам
>>> [i for i in IterFlatten([1,34.5,2,3,[[],[6,7,{'a':'b','c':'d'}]]])]
[1, 34.5, 2, 3, 6, 7, 'a', 'c']"""
    if type(iterable) is np.matrix:
        iterable=np.array(iterable)
    if hasattr(iterable,"__iter__"):
        for seq in iterable:
            for e in IterFlatten(seq):
                yield e
    else:
        yield iterable
def Flatten(iterable,level=None):
    u"""удаление внутренней структуры у списков
>>> Flatten([1,34.5,2,3,[[],[6,7,{'a':'b','c':'d'}]]])
[1, 34.5, 2, 3, 6, 7, 'a', 'c']"""
    return list(IterFlatten(iterable))



Отредактировано doza_and (Окт. 8, 2012 20:56:18)

Офлайн

#5 Окт. 9, 2012 09:30:55

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Обход вложенных списков

так попроще, наверное, если только списки

f = lambda ls: reduce(lambda res, x: res+[x] if not isinstance(x,list) else res + f(x),ls,[])
f([['define', ['if', '1', ['*', 'n', ['fac', ]]]]])
Out[3]: ['define', 'if', '1', '*', 'n', 'fac']

Офлайн

#6 Янв. 16, 2013 17:56:33

Yettee
Зарегистрирован: 2012-04-10
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Обход вложенных списков

sergeek
так попроще, наверное, если только списки

Извините за дурацкий вопрос - я в конструкции не понял, зачем писать f(x) в res+f(x)?

Офлайн

#7 Янв. 16, 2013 19:09:55

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Обход вложенных списков

f(x) это та самая функция и как бы сама себя вызывает, когда встречает список. И так лучше не надо писать на самом деле.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version