1. ホーム
  2. python

結果が1つだけの場合のリスト内包の代替手段

2023-08-04 13:44:48

質問

私はPythonのリスト内包に慣れ始めていますが、私はそれをいくらか不適切に使用しているのではないかと思っています。 私はリスト内包を使用しているが、生成されたリストの最初の(そして唯一の)項目をすぐに取っているシナリオに何度か遭遇しました。 以下はその例です。

actor = [actor for actor in self.actors if actor.name==actorName][0]

(self.actsにはオブジェクトのリストが入っていて、actorNameにある特定の(文字列)名前のオブジェクトを取得しようとしています)

探しているパラメータにマッチするオブジェクトをリストから取り出そうとしています。 この方法は無理があるのでしょうか? 0]がぶら下がってるので、ちょっと不安です。

どのように解決するのですか?

ジェネレータ式と next を使うこともできます。これは、中間リストが作成されず、マッチが見つかった時点で反復を停止することができるので、より効率的でしょう。

actor = next(actor for actor in self.actors if actor.name==actorName)

そして senderle が指摘しているように、この方法のもう一つの利点は、マッチが見つからなかった場合のデフォルトを指定できることです。

actor = next((actor for actor in self.actors if actor.name==actorName), None)