順番に読み進めながら学べます

all() と any() で一括判定

Python のビルトイン関数 all() と any() の使い方と違いを解説します。一括判定の基本から for と組み合わせる書き方まで図解で押さえます。

all() — 全てが True のときだけ True

all(イテラブル) は、引数に渡したリスト・タプル・セットなどの全要素が True(真と評価される値)であれば True を返し、1 つでも False があれば False を返す関数です。

all() の判定
[T, T, T]all()True[T, F, T]all()False[ ](空)all()True

全要素が True なら True1 つでも 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("未入力の項目があります")
# 出力: 送信できます

ショッピングカートの全商品が在庫ありかをチェックします。

in_stock = [True, True, True, False] を定義してください。

all(in_stock) の結果を print() で表示してください。

if all(in_stock): を使って、全て在庫ありなら「注文確定へ」、そうでなければ「在庫切れの商品があります」を表示してください。

(正しく実行できれば解説が表示されます)

Python エディタ

コードを実行してください

any() — 1 つでも True があれば True

any(イテラブル) は、中に 1 つでも True があれば True全部 False なら False を返します。all() がすべての合格を求める「厳しい判定」なのに対し、any() は 1 つでも見つかれば OK の「寛容な判定」です。

関数True を返す条件False を返す条件空リストを渡した場合
all()全要素が True1 つでも False があるTrue
any()1 つでも True がある全要素が FalseFalse
# 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("全て成功")
# 出力: 再実行が必要です

アンケートで少なくとも 1 人が「参加希望」と答えたかを確認します。

want_to_join = [False, False, False, True, False] を定義してください。

any(want_to_join) の結果を print() で表示してください。

if any(want_to_join): を使って、希望者がいれば「イベント開催」、いなければ「中止」を表示してください。

Python エディタ

コードを実行してください

空のコレクションを渡したときの挙動

空のリストを渡したときの返り値は、all([]) は Trueany([]) は False です。直感に反するので、要素が 0 件になり得るデータに対して使うときは注意が必要です。

空コレクションを渡したときの挙動
[ ](空)all()True[ ](空)any()False
print(all([]))   # True  ← 何も「False なものが無かった」ので True
print(any([]))   # False ← 何も「True なものが無かった」ので False

# 例:商品がまだ 1 つも登録されていないカート
cart = []
if all(cart):
    print("全商品チェック済み")   # 商品 0 でも実行される
# 注文したい意図とズレる可能性があるので、先に空チェックを

空リストの扱いを先に決める

「全員が条件を満たしたら…」の文脈で all() を使うとき、対象者が 0 人でも True が返ってしまいます。意図しない早期通過を防ぐために、if members and all(...): のように空でないことを先にチェックしましょう。

空リストを渡したときの挙動を実際に確認します。

empty = [] を定義してください。

all(empty)any(empty) の結果をそれぞれ print() で表示してください。

if empty and all(empty): を使って、空でなく全て True のときだけ「全件 OK」を表示してください(空のときは何も表示されないことを確認)。

Python エディタ

コードを実行してください

条件式と組み合わせて一気に判定する

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() に渡せる」という感覚をつかめれば十分です。

テストの点数リストを使って合否判定を行います。

scores = [78, 82, 65, 91, 55] を定義してください。

② 全員 60 点以上か(all を使用)、1 人でも 90 点以上か(any を使用)を判定し、それぞれ all_passhas_genius に代入してください。

③ 2 つの結果を print() で表示してください。

Python エディタ

コードを実行してください

この記事では、リストやタプルの中身を一括で判定する all()any() を学びました。

all() は全員通過any() は 1 人でも通過空を渡したときは all が True・any が False です。次の記事では、ここまで「結果のリスト」としてそっと出てきた [... for ... in ...] を支える for ループそのものを詳しく見ていきます。

QUIZ

理解度チェック

まずは1問ずつ答えてみましょう。

Q1次のコードの実行結果はどれですか?
print(all([1, 2, 0, 3]))

Q2次のコードの実行結果はどれですか?
print(any([False, False, False]))

Q3空リスト [] を渡したときの all([]) と any([]) の返り値の組み合わせとして正しいものはどれですか?