map()
とリスト内包表記はほぼ同等です。
map(function, list1)
[function(i) for i in list1]
使用したい関数がメソッドの場合はどうなるでしょうか?
[i.function() for i in list1]
map(.function, list1) # error!
map(run_method(function), list1) # error!
でこの種の操作を実行するにはどうすればよいmap
ですか?
map()
とリスト内包表記はほぼ同等です。
map(function, list1)
[function(i) for i in list1]
使用したい関数がメソッドの場合はどうなるでしょうか?
[i.function() for i in list1]
map(.function, list1) # error!
map(run_method(function), list1) # error!
でこの種の操作を実行するにはどうすればよいmap
ですか?
あなたが使用するだろうoperator.methodcaller()
:
from operator import methodcaller
map(methodcaller('function'), list1)
methodcaller()
呼び出されたメソッドに渡される追加の引数を受け入れます。methodcaller('foo', 'bar', spam='eggs')(object)
と同等ですobject.foo('bar', spam='eggs')
。
のすべてのオブジェクトlist1
が同じ型またはその型のサブクラスであり、呼び出したいメソッドが引数を取らない場合は、バインドされていないメソッドをmap
呼び出す関数として に渡すことができます。たとえば、リスト内のすべての文字列を小文字にするには、次を使用できます。
map(str.lower, list_of_strings)
ここstr.lower
で、型のバインドされていないメソッドstr
です。
リスト内包表記は実際にはヒアと同等ではないことに注意してmap()
ください。は1 つのmap()
ループしか実行できず、完全に C で実行されます。複数の反復可能な引数があり、Python 3 ではそれ自体が反復子です。map()
zip()
map()
一方、リスト内包表記は複数の (ネストされた) ループを実行し、フィルタリングを追加できます。左側の式は、ネストされたリスト内包表記を含む任意の有効な Python 式にすることができます。