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([]) は False、all([]) は 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