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