Pythonの組み込み関数allとanyの使い方
Pythonの組み込み関数allとanyについて解説します。
Pythonにはall()
とany()
という組み込み関数があります。
all()
関数は、引数にとったリストなどのイテラブルの全ての要素がTrue
であればTrue
を返します。
any()
関数は、引数にとったリストなどのイテラブルの要素が一つでもTrue
であればTrue
を返します。
それぞれ、引数にはイテラブルオブジェクトを取ることができるので、リスト、タプル、set型などに同様に利用することができます。以下の解説ではリスト型の例を使います。
all()関数で、すべての要素がTrueかを判定する
all()
関数は、引数のイテラブルの全ての要素がTrue
であればTrue
を返します。逆に、一つでも要素がFalse
であればFalse
を返します。
空のイテラブルオブジェクトに対してはTrue
を返すことに注意してください。
# 全ての要素がTrueかを判定
# 全ての要素がTrueならTrueを返す
all([True, True, True])
# True
# 要素が一つでもFalseならFalseを返す
all([True, True, False])
# False
# 空のイテラブルオブジェクトにはTrueを返す
all([])
# True
any()関数で、いずれかの要素がTrueかを判定する
any()
関数は、引数のイテラブルのいずれかの要素がTrue
であればTrue
を返します。逆に、すべての要素がFalse
であればFalse
を返します。
空のイテラブルオブジェクトに対してはFalse
を返すことに注意してください。
# いずれかの要素がTrueかを判定
# いずれかの要素がTrueならTrueを返す
any([False, False, True])
# True
# 要素がすべてFalseならFalseを返す
any([False, False, False])
# False
# 空のイテラブルオブジェクトにはFalseを返す
any([])
# False
not any()で、すべての要素がFalseかを判定する
any()
関数とnot
演算子を利用することで、イテラブルの要素がすべてFalse
かを判定することができます。any()
関数は「含まれる要素がすべてFalse
ならFalse
を返す」ので、not any()
を使うと「含まれる要素がすべてFalse
ならTrue
」を返すようになるからです。
# すべての要素がFalseかを判定
# すべての要素がFalseならTrueを返す
not any([False, False, False])
# True
# ひとつでもTrueならFalseを返す
not any([False, False, True])
# False
条件式の中でall()関数とany()関数を使う
if文などで条件式を書くときに、複数の条件をand
やor
で繋げることがありますが、all()
関数やany()
関数で記述することで冗長さを減らすことができます。
条件がすべてand
で繋がっている場合にはall()
関数、すべてor
で繋がっている場合にはany()
関数を利用できます。
# 条件式の中でall()関数とany()関数を使う
# すべての条件がTrueかを判定するif文
if A and B and C and D:
print("すべての条件がTrue")
else:
print("一つ以上の条件がFalse")
# all()関数で書く方法
if all([A, B, C, D]):
print("すべての条件がTrue")
else:
print("一つ以上の条件がFalse")
# いずれかの条件がTrueかを判定するif文
if A or B or C or D:
print("いずれかの条件がTrue")
else:
print("すべての条件がFalse")
# any()関数で書く方法
if any([A, B, C, D]):
print("いずれかの条件がTrue")
else:
print("すべての条件がFalse")
リスト内包表記で、含まれている要素が条件を満たすかを確認する
all()
関数やany()
関数をリスト内包表記と組み合わせることで、リストに含まれている要素が特定の条件を満たすかどうかを判定することができます。
リスト内包表記でそれぞれの要素に対して条件式(True
かFalse
を返す)を適用し、all()
関数とany()
関数で判定します。
リスト内包表記の基本的な書き方については以下の記事を参考にしてください。
# 要素が特定の条件を満たすかを判定する
nums = [1, 2, 3, 4, 5]
even_nums = [0, 2, 4, 6, 8]
# すべての要素が偶数かどうかを判定する
all([num % 2 == 0 for num in nums])
# False
all([num % 2 == 0 for num in even_nums])
# True
# いずれかの要素が偶数かを判定する
any([num % 2 == 0 for num in nums])
# True
any([num % 2 == 0 for num in even_nums])
# True