Q1次のコードの実行結果はどれですか?print(all([1, 2, 0, 3]))
all() と any() で一括判定
Python のビルトイン関数 all() と any() の使い方と違いを解説します。一括判定の基本から for と組み合わせる書き方まで図解で押さえます。
all() — 全てが True のときだけ True
all(イテラブル) は、引数に渡したリスト・タプル・セットなどの全要素が True(真と評価される値)であれば True を返し、1 つでも False があれば False を返す関数です。
全要素が True なら True。1 つでも False が混ざれば False。空を渡したときは True。
真偽評価は前記事と同じルールが適用されます。0・空文字列・空リストなどは False 扱いなので、数値リストに 0 が混ざれば all() は False になります。
# bool のリスト:1 つでも False があれば False
print(all([True, True, True])) # True
print(all([True, False, True])) # False
# 数値のリスト:0 があると False
print(all([1, 2, 3])) # True
print(all([1, 0, 3])) # False
# 必須フォーム項目が全て埋まっているか
form_values = ["田中", "tanaka@example.com", "東京都千代田区"]
if all(form_values):
print("送信できます")
else:
print("未入力の項目があります")
# 出力: 送信できます
any() — 1 つでも True があれば True
any(イテラブル) は、中に 1 つでも True があれば True、全部 False なら False を返します。all() がすべての合格を求める「厳しい判定」なのに対し、any() は 1 つでも見つかれば OK の「寛容な判定」です。
| 関数 | True を返す条件 | False を返す条件 | 空リストを渡した場合 |
|---|---|---|---|
| all() | 全要素が True | 1 つでも False がある | True |
| any() | 1 つでも True がある | 全要素が False | False |
# bool のリスト:1 つでも True があれば True
print(any([False, False, True])) # True
print(any([False, False, False])) # False
# エラー発生フラグが 1 件でも立っていたら再実行
error_flags = [False, False, True, False]
if any(error_flags):
print("再実行が必要です")
else:
print("全て成功")
# 出力: 再実行が必要です
空のコレクションを渡したときの挙動
空のリストを渡したときの返り値は、all([]) は True、any([]) は False です。直感に反するので、要素が 0 件になり得るデータに対して使うときは注意が必要です。
print(all([])) # True ← 何も「False なものが無かった」ので True
print(any([])) # False ← 何も「True なものが無かった」ので False
# 例:商品がまだ 1 つも登録されていないカート
cart = []
if all(cart):
print("全商品チェック済み") # 商品 0 でも実行される
# 注文したい意図とズレる可能性があるので、先に空チェックを
空リストの扱いを先に決める
「全員が条件を満たしたら…」の文脈で all() を使うとき、対象者が 0 人でも True が返ってしまいます。意図しない早期通過を防ぐために、if members and all(...): のように空でないことを先にチェックしましょう。
条件式と組み合わせて一気に判定する
all() / any() の真価は、比較条件と組み合わせたときに発揮されます。たとえば「全員が 18 歳以上か」を調べたいときは、年齢のリストから >= 18 を 1 件ずつ評価した結果のリストを渡せば、それを 1 行で判定できます。
ages = [19, 20, 18, 25, 57]
# 一度ブール値のリストを作ってから all に渡す(分かりやすい 2 段階)
checks = [age >= 18 for age in ages]
print(checks) # [True, True, True, True, True]
print(all(checks)) # True
# 1 行でそのまま書くこともできる(次の章で学ぶリスト内包表記/ジェネレータ式)
print(all(age >= 18 for age in ages)) # True
print(any(age >= 65 for age in ages)) # False
[age >= 18 for age in ages] のようなリスト内包表記は、for 文の章で詳しく学びます。ここではまず「リストに対して条件を一気に評価した結果を all() / any() に渡せる」という感覚をつかめれば十分です。
この記事では、リストやタプルの中身を一括で判定する all() と any() を学びました。
all() は全員通過、any() は 1 人でも通過、空を渡したときは all が True・any が False です。次の記事では、ここまで「結果のリスト」としてそっと出てきた [... for ... in ...] を支える for ループそのものを詳しく見ていきます。
理解度チェック
まずは1問ずつ答えてみましょう。
Q2次のコードの実行結果はどれですか?print(any([False, False, False]))
Q3空リスト [] を渡したときの all([]) と any([]) の返り値の組み合わせとして正しいものはどれですか?