[解決済み] イテレートから条件に合致する最初の項目を取得する
質問
ある条件に合致するリストの最初の項目を取得したい。結果として得られるメソッドがリスト全体を処理しないことが重要で、それは非常に大きくなる可能性があります。例えば、次のような関数が適切です。
def first(the_iterable, condition = lambda x: True):
for i in the_iterable:
if condition(i):
return i
この関数は、次のような使い方ができる。
>>> first(range(10))
0
>>> first(range(10), lambda i: i > 3)
4
しかし、これを可能にする良い組み込み/ワンライナーが思いつきません。特に必要なければ、この関数をコピーする必要はないのですが。条件にマッチする最初の項目を取得する組み込みの方法はないでしょうか?
どのように解決するのですか?
Python 2.6+とPython 3。
もし、あなたが
StopIteration
が発生します。
next(x for x in the_iterable if x > 3)
もし、あなたが
default_value
(例
None
を返します。
next((x for x in the_iterable if x > 3), default_value)
この場合、ジェネレータ式を囲む一対の括弧が必要であることに注意してください。
を断固として無視する回答が多いようですね。
next
が組み込まれているため、何らかの不思議な理由でバージョン2.5以降に100%集中しているのだと思います。
する
について言及しています。
next
少なくともquot;correct version"の問題は、この方法で記録されます;-)。
Python <= 2.5
は
.next()
メソッドを呼び出すと、すぐに
StopIteration
イテレータがすぐに終了する場合、つまり、あなたの使用例では、イテレータブルの中に条件を満たす項目がない場合です。 もしあなたが気にしないのであれば(すなわち
が必要です。
を使用すればよい。
.next()
(genexpで最適、行は
next
Python 2.6以降で内蔵されています)。
もし、あなたが
する
また、あなたが提案した関数の実装も良いのですが、代わりに
itertools
, a
for...: break
ループ、またはgenexp、または
try/except StopIteration
を関数の本体として使用することを提案しました。 どの選択肢もあまり付加価値がないので、私なら最初に提案された極めてシンプルなバージョンにします。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python jiabaライブラリの使用方法について説明
-
Python百行で韓服サークルの画像クロールを実現する
-
Pythonの画像ファイル処理用ライブラリ「Pillow」(グラフィックの詳細)
-
[解決済み】TypeError: unhashable type: 'numpy.ndarray'.
-
[解決済み】お使いのCPUは、このTensorFlowバイナリが使用するようにコンパイルされていない命令をサポートしています。AVX AVX2
-
[解決済み】OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません。
-
[解決済み】Django: ImproperlyConfigured: SECRET_KEY 設定は空であってはならない
-
[解決済み】 TypeError: += でサポートされていないオペランド型: 'int' および 'list' です。
-
[解決済み】django インポートエラー - core.managementという名前のモジュールがない
-
[解決済み] 基準に一致する最初のシーケンスアイテムを探す[重複]。