python中合并不规则列表
除一个解决方案外,所有解决方案在这样的列表上都失败了:
L = [[[1, 2, 3], [4, 5]], 6]
所需的输出是
[1, 2, 3, 4, 5, 6]
甚至更好的迭代器。这个问题是我看到的唯一适用于任意嵌套的解决方案:
def flatten(x): result = []
for el in x:
if hasattr(el, "__iter__") and not isinstance(el, basestring):
result.extend(flatten(el))
else:
result.append(el)
return result
flatten(L)
这是最好的模型吗?
回答:
使用生成器函数可以使你的示例更易于阅读,并可能提高性能。
Python 2
def flatten(l): for el in l:
if isinstance(el, collections.Iterable) and not isinstance(el, basestring):
for sub in flatten(el):
yield sub
else:
yield el
我使用了2.6中添加的Iterable ABC。
Python 3
在Python 3中,basestring是没有更多的,但你可以使用一个元组str,并bytes得到同样的效果存在。
该yield from运营商从一时间产生一个返回的项目。这句法委派到子发生器在3.3加入
def flatten(l): for el in l:
if isinstance(el, collections.Iterable) and not isinstance(el, (str, bytes)):
yield from flatten(el)
else:
yield el
以上是 python中合并不规则列表 的全部内容, 来源链接: utcz.com/qa/427651.html