Jos*_*shi 9 python generator python-3.x
我想知道如何编写python函数,它可以展平生成器,生成另一个生成器或迭代(也可以产生另一个生成器/迭代......可能是无限的).
这是一个例子:
gen(gen(1,2,3), gen(4,5,6), [7,8,9], [gen(10,11,12), gen(13,14,15)])
注意:gen
- 表示生成器对象,括号之间的内容gen
是生成器生成的数据gen
.
"扁平化"后的预期结果:
gen(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15)
扁平功能也必须返回发电机!(因为否则,先前使用的发电机将毫无意义).
请注意,我使用的是python 3.
谢谢!
Sve*_*ach 14
最简单的方法是递归展平功能.假设您想要下降到除字符串之外的每个可迭代项,您可以这样做:
def flatten(it):
for x in it:
if (isinstance(x, collections.Iterable) and
not isinstance(x, str)):
for y in flatten(x):
yield y
else:
yield x
Run Code Online (Sandbox Code Playgroud)
从Python 3.3开始,您也可以编写
def flatten(it):
for x in it:
if (isinstance(x, collections.Iterable) and
not isinstance(x, str)):
yield from flatten(x)
else:
yield x
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2541 次 |
最近记录: |