有谁知道为什么这段代码无法顺利运行?似乎不喜欢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
答案 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