3

私はこの質問に答えていて、次の問題に直面しました。

>>> from operator import add
>>> map(add,[1,2,3],[1,2])

Traceback (most recent call last):
  File "<pyshell#47>", line 1, in <module>
    map(add,[1,2,3],[1,2])
TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'

mapパラメータで提供されている最小のイテレータが消費されたらすぐに停止したかったのです。

私は解決策を見つけました:

>>> from itertools import imap
>>> list(imap(add,[1,2,3],[1,2]))
[2, 4]

しかし、それはなぜですか?彼らの行動は一貫しているべきではありませんか?

それは私が問題を回避する最良の方法ですか?

4

2 に答える 2

4

説明に記載されているようにitertools.imap

各イテレータからの引数を使用して関数を計算するイテレータを作成します。関数がNoneに設定されている場合、imap()は引数をタプルとして返します。map()と同様ですが、短いiterableの場合はNoneと入力する代わりに、最短のiterableが使い果たされると停止します。違いの理由は、無限イテレータ引数は通常map()のエラーですが(出力が完全に評価されるため)、imap()に引数を提供する一般的で便利な方法を表しているためです。

于 2012-11-12T17:19:30.883 に答える
2

どうですか:map(sum, zip([1,2,3],[4,5]))

于 2012-11-12T17:46:41.623 に答える