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キーワードreturngeneratorsで機能します。例えば

>>> 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 に答える