我有一个小功能来压缩列表和元组。递归调用确实被调用,但是......没有任何反应。“没有”我的意思是:没有打印stderr消息,也没有产生结果。这种行为没有意义,所以指针赞赏。 THX!
def flatten(*arr):
sys.stderr.write("STDERR: arr is %s\n" %list(arr))
for a in arr:
if type(a) is list or type(a) is tuple:
flatten(a)
else:
yield a
print list(flatten(['hi there','how are you'],'well there','what?',[1, 23423,33]))
答案 0 :(得分:2)
您的功能有几个问题。
首先,使用isinstance()
来简化序列测试:
for a in arr:
if isinstance(a, (list, tuple)):
您需要遍历递归flatten()
调用以将元素传递给调用者,并将列表作为单独的参数传递(使用*
语法,以镜像函数签名):
for sub in flatten(*a):
yield sub
通过这些更改,发电机可以工作:
>>> def flatten(*arr):
... for a in arr:
... if isinstance(a, (list, tuple)):
... for sub in flatten(*a):
... yield sub
... else:
... yield a
...
>>> print list(flatten(['hi there','how are you'],'well there','what?',[1, 23423,33]))
['hi there', 'how are you', 'well there', 'what?', 1, 23423, 33]