🔖

Pythonの any() と all() の違いと使い分け

に公開

はじめに

Pythonで複数の条件を一度にチェックしたいとき、any()all() を使うとコードがシンプルで読みやすくなります。
しかし、それぞれの挙動を混同してしまうことも少なくありません

  • 「条件をひとつでも満たせば True になるのはどちらか?」
  • 「すべて満たす必要があるのはどちらか?」
  • 「空リストを渡したらどうなるのか?」

本記事では、any()all() の違いと使い分けのポイントを具体例とともに解説します。

1. 基本の使い方

any():ひとつでも True があれば True

any([False, False, True])  # → True

all():すべてが True なら True

all([True, True, True])  # → True
all([True, False, True])  # → False

このように、any は「ひとつでもOK」、all は「すべてがOK」 という違いがあります。

2. 実務でよくあるパターン

any():任意の要素が辞書かどうか調べる

element = {
    "values": [1, "text", {"key": "value"}, [1, 2, 3]]
}

contains_dict = any(isinstance(item, dict) for item in element['values'])
print(contains_dict)  # True

ひとつでも満たしていれば良い場合、any() を使います。

💡 isinstance() の補足はこちら → type()とisinstance()の違い

all():すべての要素が整数かどうか調べる

numbers = [1, 2, 3, 4]
only_ints = all(isinstance(n, int) for n in numbers)
print(only_ints)  # True

すべての要素が条件を満たす必要がある場合、all() を使います。

3. 空リストに注意

any([])Falseall([])True になる点は要注意です。

any([])  # False
all([])  # True

all() は「False になる要素が見つからなかったときに True を返す」関数です。

なぜ all([])True になるかというと、「すべての要素が条件を満たす」という条件において、そもそもチェック対象がなければ「反証がないのでOK」とみなされるからです(数学的には「空集合に対する全称命題は真」とされます)。

4. 応用:フィルタ処理で使う

リストの中から、いずれかの条件を満たす要素だけを抽出したい場合は any() が便利です。

data = ["apple", "orange", "grape", "melon"]
keywords = ["app", "gra"]

# どれか1つでもキーワードを含む要素を抽出
result = [item for item in data if any(kw in item for kw in keywords)]
print(result)  # ['apple', 'grape']

一方で、すべての条件を満たす要素を抽出したい場合は all() を使います。

data = ["grapefruit", "pineapple", "apple", "grape", "melon"]
keywords = ["app", "le"]

# すべてのキーワードを含む要素を抽出
strict_result = [item for item in data if all(kw in item for kw in keywords)]
print(strict_result)  # ['pineapple', 'apple']

このように、any()all() を使い分けることで、条件に応じた柔軟なフィルタ処理が可能になります。

おわりに

any()all() は使いどころを押さえるととても便利です。

  • any():どれかひとつでも満たしている場合
  • all():すべて満たしている必要がある場合

シンプルな構文で複雑な条件チェックが書けるので、コードの見通しも良くなります。
ぜひ、実際のコードでも使い分けを意識してみてください。

本記事が参考になれば幸いです。

Discussion