1

我遵循了使用以下代码在 python 中展平不规则列表列表的最佳解决方案(展平(不规则)列表列表):

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


L = [[[1, 2, 3], [4, 5]], 6]

L=flatten(L)
print L

并得到以下输出:

“生成器对象在 0x100494460 处展平”

我不确定我需要导入哪些包或需要更改语法才能让它为我工作。

4

2 回答 2

5

您可以直接迭代生成器对象:

for x in L:
    print x

或者如果你真的需要一份清单,你可以从中制作一份:

list(L)
于 2013-02-06T19:50:21.930 回答
5

带有yield关键字返回生成器的函数。例如

>>> def func():
...     for x in range(3):
...         yield x
... 
>>> a = func()
>>> print a
<generator object func at 0xef198>
>>> next(a)
0
>>> next(a)
1
>>> next(a)
2
>>> next(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
>>> 
>>>
>>> for x in func():
...     print x
... 
0
1
2

换句话说,它们是懒惰地评估,只在迭代中请求它们时给你值。从生成器构造列表的最佳方法是使用list内置函数。

print list(L)
于 2013-02-06T19:50:41.097 回答