1. ホーム
  2. python

[解決済み] 基準に一致する最初のシーケンスアイテムを探す[重複]。

2022-03-15 07:28:47

質問

ある基準に合致する最初のリスト項目を見つけ、返すための最もエレガントで効率的な方法は何でしょうか?

例えば、オブジェクトのリストがあり、その中の最初のオブジェクトの属性が obj.val==5 . もちろんリスト内包を使うこともできますが、O(n)がかかりますし、nが大きいと無駄が多くなります。を使ったループを使うこともできる。 break しかし、もっとパイソン的でエレガントなソリューションがあるのではないかと思いました。

解決方法は?

オブジェクトのインデックスやソート情報が他にない場合、そのようなオブジェクトが見つかるまで反復する必要があります。

next(obj for obj in objs if obj.val == 5)

しかし、これは完全なリスト内包よりも高速である。この2つを比べてみてください。

[i for i in xrange(100000) if i == 1000][0]

next(i for i in xrange(100000) if i == 1000)

最初のものは5.75ms、2番目のものは58.3μs必要です(ループが100倍短いので100倍速い)。