「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Python でジェネレーターが空かどうかを判断する方法

Python でジェネレーターが空かどうかを判断する方法

2024 年 11 月 16 日に公開
ブラウズ:520

How to Determine If a Generator is Empty in Python

ジェネレーターの空性の決定

Python では、ジェネレーターは、遅延評価と大規模なデータセットの反復処理のための強力なツールです。ただし、ジェネレーターが空であるかどうかを判断するには、その動的な性質により特有の課題が生じます。リストやタプルとは異なり、ジェネレーターにはサイズ属性がありません。単純にそれらを反復処理すると、StopIteration 例外が発生します。

Peek vs. HasNext

提案する人もいるPeak() 関数を使用して、ジェネレーターに項目があるかどうかを確認します。 Peak() を使用すると、ジェネレーターの最初の項目を消費せずに取得できますが、ジェネレーターが空かどうかを判断する方法は提供されません。これは、ジェネレータが空の場合、peek() が StopIteration 例外を発生させるためです。これは、空のジェネレータを反復しようとしたときに発生する例外と区別がつきません。

同様に、hasNext() 関数は、一般的に、 Java にありますが、Python ジェネレーターでは使用できません。

最初から空かどうかを確認する

ジェネレーターが最初から空かどうかを判断するには、応答で提供されるカスタム関数:

def peek(iterable):
    try:
        first = next(iterable)
    except StopIteration:
        return None
    return first, itertools.chain([first], iterable)

この関数はジェネレーターの最初の要素を取得し、ジェネレーターが空の場合は None を返します。また、最初の要素を含む変更されたバージョンを返すことにより、ジェネレーターの状態も保存されます。

Usage

この関数を使用するには、ジェネレーターで関数を呼び出すことができます。引数:

res = peek(mysequence)
if res is None:
    # sequence is empty.  Do stuff.
else:
    first, mysequence = res
    # Do something with first, maybe?
    # Then iterate over the sequence:
    for element in mysequence:
        # etc.

このチェックにより、ジェネレーターが空かどうかを判断し、反復する前に空の場合を適切に処理できます。

リリースステートメント この記事は次の場所に転載されています: 1729390457 権利侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3