Python迭代

时间:2011-04-21 18:13:19

标签: python

有谁知道为什么这段代码无法顺利运行?似乎不喜欢yield关键字的迭代: 我试图从任何级别的列表或dicts(特别是对列表感兴趣)中挖掘所有数字。 在第二次迭代中,它找到了[2,3],但未能一个接一个地打印2和3 ...想象一下,我可以有多个级别的列表。

def digIn( x ):
    try:
        if isDict(x) or isList(x):
            print "X:", x
            for each in x:
                print "each:", each
                if isDict(each) or isList(each):
                    digIn(each)
                else:
                    yield each
        else:
            yield x
    except Exception,ex:
        print ex

print "STARTING OVER"
for i in digIn( [1,[2,3]] ):
    print i

3 个答案:

答案 0 :(得分:1)

你应该“重新产生”生成器以递归方式遍历所有列表元素。

if isDict(each) or isList(each):
     for elem in digIn(each):
         yield elem
else:
     yield each

答案 1 :(得分:1)

digIn(each)不正确。您必须迭代它,并依次产生每个值。

答案 2 :(得分:1)

当递归调用digIn时,内部收益率不会导致从外部调用中产生值。相反,递归digIn返回一个生成器,然后你静静地丢弃该生成器并丢失内部项。

您需要显式地从递归调用中产生结果。

if isDict(each) or isList(each):
    for innerItem in digIn(each):
        yield innerItem
else:
    yield each