Pythonでall、any、max、min関数を使用する方法

提供:Dev Guides
移動先:案内検索

著者はCOVID-19救済基金を選択し、 Write forDOnationsプログラムの一環として寄付を受け取りました。

序章

Pythonには、いくつかの組み込み関数が含まれています。これらは、追加のモジュールをインポートせずに任意のPythonコードから呼び出すことができるグローバルPython関数です。 たとえば、いつでもprint組み込み関数を呼び出してテキストを出力できます。

いくつかの組み込み関数(allanymax、およびmin)は、値のiterablesを次のように取ります。それらの引数と単一の値を返します。 iterable は、「反復」できるPythonオブジェクトです。つまり、forループで使用できるようにアイテムを順番に返します。 組み込み関数は、たとえば、リスト内のすべてまたは一部の要素が特定の基準を満たしているかどうかを判断したり、リスト内の最大または最小の要素を検索したりする場合に役立ちます。

このチュートリアルでは、組み込み関数allanymax、およびminを使用します。

前提条件

このチュートリアルを最大限に活用するには、次のものを用意することをお勧めします。

  • Python3でのプログラミングにある程度精通している。 背景知識については、 Python3チュートリアルシリーズでコーディングする方法を確認できます。
  • Python Interactive Console、このチュートリアルのサンプルコードを試してみたい場合は、 Python InteractiveConsoleチュートリアルの操作方法を使用できます。

allを使用する

組み込み関数allは、イテラブル内のすべての要素がTrueであるかどうかをチェックします。 例えば:

all([True, True])

前のコードを実行すると、次の出力が表示されます。

OutputTrue

この最初の例では、allを呼び出し、2つの要素(2つのTrueブール値)を含むリストを指定します。 iterableのすべての要素はTrueであるため、出力はTrueでした。

allは、指定された反復可能要素の1つ以上の要素がFalseの場合、Falseを返します。

all([True, False, True])

前のコードを実行すると、次の出力が表示されます。

OutputFalse

1つのFalseブール値を含む3つの要素を含むリストを使用して、allを呼び出します。 iterableの要素の1つがFalseであったため、allへの呼び出しの出力はFalseでした。

特に、allは反復を停止し、反復可能オブジェクトの最初のFalseエントリに遭遇するとすぐに、Falseを返します。 したがって、allは、相互に構築される可能性のある連続する条件をチェックしたいが、1つの条件がFalseになるとすぐに戻る場合に役立ちます。

注意すべき特別なケースは、allに空のイテラブルが与えられた場合です。

all([])

前のコードを実行すると、次の出力が表示されます。

OutputTrue

allに空のイテラブル(たとえば、all([])のような空のリスト)を指定すると、その戻り値はTrueになります。 したがって、allは、反復可能要素のすべての要素がTrueであるか、要素が0の場合、Trueを返します。

allは、ジェネレーターおよびカスタム条件と組み合わせると特に役立ちます。 allの使用は、本格的なforループを作成する場合よりも短く、簡潔になることがよくあります。 "s"で始まる要素がリストにあるかどうかを調べる例を考えてみましょう。

animals = ["shark", "seal", "sea urchin"]
all(a.startswith("s") for a in animals)

前のコードを実行すると、次の出力が表示されます。

OutputTrue

generatorを引数としてallを呼び出します。 ジェネレータは、動物が文字sで始まるかどうかに基づいて、animalsリストの各要素のブール値を生成します。 animalsリストのすべての要素がsで始まるため、最終的な戻り値はTrueです。

注:メモリを節約する方法として、リスト内包表記の代わりにジェネレータ式を使用できることがよくあります。 たとえば、all(i < 8 for i in range(3))all([i < 8 for i in range(3)])について考えてみます。 0、1、2はすべて8未満であるため、どちらのステートメントもTrueを返します。 ただし、2番目の例(リスト内包表記を使用)には、3つのエントリの長さ([True, True, True])のリストを暗黙的に作成し、そのリストをall関数に渡すという追加のオーバーヘッドがあります。 対照的に、最初の例(ジェネレータ式を使用)は、ジェネレータオブジェクトをall関数に渡します。この関数は、all関数が中間リストのオーバーヘッドなしで直接繰り返します。


本格的なforループを使用して記述された同等のコードは、かなり冗長であると考えてください。

animals = ["shark", "seal", "sea urchin"]

def all_animals_start_with_s(animals):
    for a in animals:
        if not a.startswith("s"):
            return False
    return True

print(all_animals_start_with_s(animals))

allがない場合、すべての動物が文字sで始まるかどうかを判断するためのコードでは、実装するためにさらに数行が必要です。

次に、allの兄弟関数anyを見ていきます。

anyを使用する

組み込み関数anyを使用して、イテラブル内の要素がTrueであるかどうかを確認できます。 例えば:

any([False, True])

前のコードを実行すると、次の出力が表示されます。

OutputTrue

anyを呼び出し、2つの要素(Falseブール値とTrueブール値)を含むリストを指定します。 iterableの1つ以上の要素がTrueであったため、出力もTrueでした。

anyは、指定された反復可能要素の要素の0がTrueである場合にのみ、Falseを返します。

all([False, False, False])

前のコードを実行すると、次の出力が表示されます。

OutputFalse

3つの要素(すべてFalseブール値)を含むリストを使用してanyを呼び出します。 iterableの要素の0はTrueであるため、anyへの呼び出しの出力はFalseです。

特に、anyは反復を停止し、反復可能オブジェクトの最初のTrueエントリに遭遇するとすぐに、Trueを返します。 したがって、anyは、連続する条件を確認する場合に役立ちますが、1つの条件がTrueになるとすぐに戻ります。

anyは、その兄弟メソッドallと同様に、(完全なforループの代わりに)ジェネレーターおよびカスタム条件と組み合わせると特に役立ちます。 "urchin"で終わる要素がリストにあるかどうかを調べる例を考えてみましょう。

animals = ["shark", "seal", "sea urchin"]
any(s.endswith("urchin") for s in animals)

次の出力が表示されます。

OutputTrue

ジェネレーターを引数としてanyを呼び出します。 ジェネレータは、動物がurchinで終わるかどうかに基づいて、animalsリストの各要素のブール値を生成します。 animalsリストの1つの要素がurchinで終わるため、最終的な戻り値はTrueです。

注: anyに空の反復可能オブジェクト(たとえば、any([])のような空のリスト)が与えられた場合、その戻り値はFalseです。 したがって、anyは、イテラブルに0個の要素がある場合、またはイテラブル内のすべての要素もFalseである場合、Falseを返します。


次に、別の組み込み関数maxを確認します。

maxを使用する

組み込み関数maxは、引数で指定された最大の要素を返します。 例えば:

max([0, 8, 3, 1])

maxには、引数として4つの整数を含むリストが与えられます。 maxの戻り値は、そのリストの最大の要素8です。

出力は次のようになります。

Output8

(反復可能な単一の位置引数とは対照的に)2つ以上の位置引数が指定された場合、maxは指定された引数の最大のものを返します。

max(1, -1, 3)

前のコードを実行すると、次の出力が表示されます。

Output3

maxには3つの個別の引数が与えられ、そのうち最大のものは3です。 したがって、maxへの呼び出しの戻り値は3です。

anyallと同様に、maxは、完全なforループとして記述された同等のコードよりも使用する行数が少ないため、特に役立ちます。

maxは、数値よりも複雑なオブジェクトを処理することもできます。 たとえば、プログラム内の辞書やその他のカスタムオブジェクトでmaxを使用できます。 maxは、keyという名前のキーワード引数を使用して、これらのオブジェクトに対応できます。

keyキーワード引数を使用して、最大値を決定するための比較で使用される値を決定するカスタム関数を定義できます。 例えば:

entries = [{"id": 9}, {"id": 17}, {"id": 4}]
max(entries, key=lambda x: x["id"])

出力は次のようになります。

Output{'id': 17}

辞書のリストを入力としてmaxを呼び出します。 keyキーワード引数として匿名のlambda関数を指定します。 maxは、entriesリスト内のすべての要素に対してlambda関数を呼び出し、指定された要素の"id"キーの値を返します。 最終的な戻り値は、entriesの2番目の要素{"id": 17}です。 entriesの2番目の要素は、"id"の値が最大であったため、最大の要素と見なされました。

maxが空のイテラブルで呼び出されると、操作を拒否し、代わりにValueErrorを発生させることに注意してください。

max([])

このコードを実行すると、次の出力が表示されます。

OutputTraceback (most recent call last):
  File "max.py", line 1, in <module>
    max([])
ValueError: max() arg is an empty sequence

空のリストを引数としてmaxを呼び出します。 maxはこれを有効な入力として受け入れず、代わりにValueError例外を発生させます。

maxには、minという対応するものがあります。これについては、次に確認します。

minを使用する

組み込み関数minは、引数で指定された最小の要素を返します。 例えば:

min([8, 0, 3, 1])

minに4つの整数を引数として持つリストを指定します。 minの戻り値は、そのリスト内の最小の要素0です。

出力は次のようになります。

Output0

(反復可能な単一の位置引数とは対照的に)2つ以上の位置引数が指定された場合、minは指定された引数の最小値を返します。

min(1, -1, 3)

前のコードを実行すると、次の出力が表示されます。

Output-1

minに3つの個別の引数を指定します。そのうち、最小のものは-1です。 したがって、minへの呼び出しの戻り値は-1です。

maxと同様に、minkeyという名前のキーワード引数をサポートしているため、数値よりも複雑なオブジェクトを渡すことができます。 key引数を使用すると、プログラムで定義する可能性のある任意のカスタムオブジェクトでmin関数を使用できます。

keyキーワード引数を使用して、最小値を決定するための比較で使用される値を決定するカスタム関数を定義できます。 例えば:

entries = [{"id": 9}, {"id": 17}, {"id": 4}]
min(entries, key=lambda x: x["id"])
Output{'id': 4}

辞書のリストを入力としてminを呼び出します。 keyキーワード引数として匿名のlambda関数を指定します。 minは、entriesリスト内のすべての要素に対してlambda関数を呼び出し、指定された要素の"id"キーの値を返します。 最終的な戻り値は、entriesの3番目の要素{"id": 4}です。 entriesの3番目の要素は、"id"の値が小さいため、最小要素と見なされました。

maxと同様に、空のイテラブルを指定してminを呼び出すと、操作が拒否され、代わりにValueErrorが発生します。

min([])

前のコードを実行すると、次の出力が表示されます。

OutputTraceback (most recent call last):
  File "min.py", line 1, in <module>
    min([])
ValueError: min() arg is an empty sequence

空のリストを引数としてminを呼び出します。 minはこれを有効な入力として受け入れず、代わりにValueError例外を発生させます。

結論

このチュートリアルでは、Pythonの組み込み関数allanymax、およびminを使用しました。 関数allanymaxminおよびその他のPython組み込みについては、Pythonドキュメントで詳しく知ることができます。 ]。

他のPython組み込み関数の詳細については、数値を操作するための組み込みのPython 3関数Pythonマップ関数の使用方法、およびも確認できます。 Pythonフィルター関数の使用方法。