私はPython初心者が古いPython本を読んでいます。これはPython 2に基づいているので、時々少ししか得られません詳細について混乱しています。
コードがあります
_L=map(lambda x:2**x, range(7))
_
そのため、python 3のリストは返されません。グーグルで検索したところ、_list(L
_)が機能することがわかりました。しかし、問題は、最初のlist(L)
は正常に機能することですが、もう一度使用すると、
_list(L)
list(L)
_
2番目のものは_[ ]
_を返します
誰かが私に何が起こっているのか説明できますか?
map
はイテレータを返します。そのため、その出力は1回だけ使用できます。 Python 2.xと同じように、結果をリストに保存する場合は、list
を使用するときにmap
を呼び出すだけです。
L = list(map(lambda x:2**x, range(7)))
リストL
には、何度呼び出しても結果が含まれます。
あなたが直面している問題は、map
が一度繰り返されると、それ以降の呼び出しごとに何も生成されないことです。したがって、2番目の呼び出しの空のリストが表示されます。
イテレータを使い果たすことができないが、それを2回使用したい場合の回避策の詳細な説明とアドバイスについては、 同じデータに対して2回反復できない理由 を参照してください。
Python 3.xは、ジェネレータオブジェクトを返します。
_$ python3 -c "print(map(lambda x: 2**x, range(7)))"
<map object at 0x104203208>
_
list()
を使用してこれらの値を抽出できますが、ジェネレーターが使い果たされる可能性があります。したがって、その後list()
を使用すると、next()
呼び出しでアクセスする値がなくなるため、空の_[]
_になります。ジェネレーターを少し試してみることをお勧めします。または、ここを少し読んでください https://wiki.python.org/moin/Generators 。お役に立てれば