ホームページ  >  記事  >  バックエンド開発  >  Python でジェネレーターが空かどうかを確認する方法

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-20 10:40:02916ブラウズ

How to Determine If a Generator is Empty in Python

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

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

Peek vs. HasNext

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

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

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

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

<code class="python">def peek(iterable):
    try:
        first = next(iterable)
    except StopIteration:
        return None
    return first, itertools.chain([first], iterable)</code>

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

使用法

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

<code class="python">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.</code>

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

以上がPython でジェネレーターが空かどうかを確認する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。