展平Python中的列表列表Flatten不起作用可能的生成器问题

问题描述

我相信生成器存在问题,我不确定这是我的代码还是与我的编码环境有关(我正在使用Jupyter Notebook)

所需结果:

我希望列出以下列表:

ugh = [["hi","this"],["is","annoying"],["like...","really"],["reallly","annoying"]]

进入字符串列表,如下所示:

["hi","this","is","annoying","like...","really","reallly","annoying"]

到目前为止,我一直尝试同时使用itertools.chainflatten()的变体形式,到目前为止,我的结果如下:

平铺函数

from collections import Iterable

def flatten(coll):
    for i in coll:
            if isinstance(i,Iterable) and not isinstance(i,basestring):
                for subc in flatten(i):
                    yield subc
            else:
                yield i

print(flatten(ugh))

结果:

Itertools:

print(list(itertools.chain(*sublist)) for sublist in ugh)

结果:

我非常感谢您的帮助,因为当我搜索任何一个输出时,都没有结果。

解决方法

import numpy as np
ugh = [["hi","this"],["is","annoying"],["like...","really"],["reallly","annoying"]];
ugh = np.array(ugh);
flatten_ugh = ugh.flatten();
print(flatten_ugh);
,

最好的方式,通常也更快,更有效-使用列表理解。我使用了一个嵌套列表,因为列表中有一个列表。

[val for sublist in ugh for val in sublist]

让我知道它是否有效。