かなり長くなる可能性のあるオブジェクトの Python リストがあります。flag
特定の時点で、False と評価される特定の属性 (たとえば、 ) を持つリスト内のすべての要素に関心があります。そのために、次のようなリスト内包表記を使用しています。
objList = list()
# ... populate list
[x for x in objList if not x.flag]
これはうまくいくようです。サブリストを作成した後、いくつかの異なる操作を行う必要があります。
- サブリストに添字を付けて index の要素を取得します
ind
。 - サブリストの長さを計算します (つまり、 を持つ要素の数
flag == False
)。 - 特定のオブジェクトの最初のインスタンスのサブリストを検索します (つまり、リストの
.index()
メソッドを使用します)。
サブリストを作成し、そのメソッドを使用して必要なデータを取得するという単純なアプローチを使用して、これらを実装しました。これらについてもっと効率的な方法があるかどうか疑問に思っています。#1 と #3 は少なくとも最適化できるように見えます。なぜなら、#1 ではind + 1
サブリストの最初に一致する要素のみが必要であり、必ずしも結果セット全体ではなく、#3 では必要になるまでサブリストを検索するだけでよいからです。一致する要素を見つけます。
これを行うための良いPythonicの方法はありますか? リスト全体を作成する代わりに、何らかの方法で構文を使用し()
てジェネレーターを取得できると思いますが、まだ正しい方法を見つけていません。もちろん、手動でループを作成することもできますが、理解ベースの方法と同じくらいエレガントなものを探しています。