2017-08-14 14 views
1

私はPythonで関数型プログラミングに興味があり、Mary Rose Cookのブログ記事A practical introduction to functional programmingを使って作業しています。どうやら、それはこのようパイソン2で書かれていたpythonで地図関数の問題を解決する3 vs python 2

:Pythonの3つの利回りこの中

name_lengths = map(len, ["Mary", "Isla", "Sam"]) 

print name_lengths 
# => [4, 4, 3] 

:これはされているのはなぜ

  1. <map object at 0x100b87a20> 
    

    私は2つの質問を持っていますそう?

  2. converting the map object to a list and then use numpy以外の解決策はありますか? Pythonの3で、それはイテレータを返しながらmigration guideに、文書よう

答えて

2

、Pythonの2マップで

()はリストを返します。

Python 2

反復可能の項目ごとに関数を適用し、結果のリストを返します。

Python 3

戻る結果をもたらす、反復可能の項目ごとに関数を適用するイテレータ。

のPython 2は常にlist(imap(...))と同等の処理を行い、Pythonの3が、遅延評価が可能になります。

1

@ dhkeの優れた答え(これはコメントには長すぎます)を補うために、このように考えてください。これを考えるには二つの方法がありますので、など、filtermapを組み合わせることにより、リスト上の複数の変換を実行したい:

  1. など、第二、その後、リスト全体への最初の変換を適用
  2. は、リストの最初の要素、そして第2などへのすべての変換を適用します
  3. 第二はPython 2のように簡潔に記述することはできません一方のpython3の方法は、どちらかが可能になります

:あなたは明示的に反復しなければなりませんリストはforループであり、結果の新しいリストを構築する。

関連する問題