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

Подскажите, пожалуйста, как это сделать!!
FishHook
А откуда такой список взялся?
cska63
FishHook
А откуда такой список взялся?
my_list= str(nestedExpr('(', ‘)’).parseString(txt))
doza_and
Может мой велосипед вам поможет?
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))
sergeek
так попроще, наверное, если только списки
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']
Yettee
sergeek
так попроще, наверное, если только списки

Извините за дурацкий вопрос - я в конструкции не понял, зачем писать f(x) в res+f(x)?
sergeek
f(x) это та самая функция и как бы сама себя вызывает, когда встречает список. И так лучше не надо писать на самом деле.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB