38

どちらを使用するのが良いか、特にキーワード引数として使用する方が良いという兆候があるかどうか、私は興味がありましたoperator.itemgetter(0)。それが最初に頭に浮かぶ使用法です。既知のパフォーマンスの違いはありますか? この問題に関する PEP 関連の設定やガイダンスはありますか?lambda x:x[0]sorted()key

4

3 に答える 3

43

itemgetter のパフォーマンスはわずかに向上しています。

>>> f1 = lambda: sorted(w, key=lambda x: x[1])
>>> f2 = lambda: sorted(w, key=itemgetter(1))
>>> timeit(f1)
21.33667682500527
>>> timeit(f2)
16.99106214600033
于 2013-06-21T20:22:55.467 に答える
19

itemgetter または lambda 関数を作成する場所にしばしば基づく速度の問題は別として、個人的にitemgetterは、一度に複数のアイテムを取得するのに非常に適していると思います。たとえば、itemgetter(0, 4, 3, 9, 19, 20)アイテムのタプルを返す関数を作成しますそれに渡されたリストのようなオブジェクトの指定されたインデックス。ラムダでそれを行うには、 が必要になりますがlambda x:x[0], x[4], x[3], x[9], x[19], x[20]、これはかなり厄介です。(そして、通常のブラケット記法に組み込まれていることを除けnumpyば、高度な索引付けを備えたパッケージもあります。)itemgetter()

于 2013-06-21T20:22:39.413 に答える