Pythonでall、any、max、min関数を使用する方法
著者はCOVID-19救済基金を選択し、 Write forDOnationsプログラムの一環として寄付を受け取りました。
序章
Pythonには、いくつかの組み込み関数が含まれています。これらは、追加のモジュールをインポートせずに任意のPythonコードから呼び出すことができるグローバルPython関数です。 たとえば、いつでもprint
組み込み関数を呼び出してテキストを出力できます。
いくつかの組み込み関数(all
、any
、max
、およびmin
)は、値のiterablesを次のように取ります。それらの引数と単一の値を返します。 iterable は、「反復」できるPythonオブジェクトです。つまり、for
ループで使用できるようにアイテムを順番に返します。 組み込み関数は、たとえば、リスト内のすべてまたは一部の要素が特定の基準を満たしているかどうかを判断したり、リスト内の最大または最小の要素を検索したりする場合に役立ちます。
このチュートリアルでは、組み込み関数all
、any
、max
、および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
です。
any
やall
と同様に、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
と同様に、min
はkey
という名前のキーワード引数をサポートしているため、数値よりも複雑なオブジェクトを渡すことができます。 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の組み込み関数all
、any
、max
、およびmin
を使用しました。 関数all
、any
、max
、min
およびその他のPython組み込みについては、Pythonドキュメントで詳しく知ることができます。 ]。
他のPython組み込み関数の詳細については、数値を操作するための組み込みのPython 3関数、 Pythonマップ関数の使用方法、およびも確認できます。 Pythonフィルター関数の使用方法。