概要(all は「すべてが真なら True」を返す基本関数)
all は、リスト・タプル・集合・辞書・ジェネレータなどのイテラブルの中の「全ての要素が True と評価されるか」を判定する組み込み関数です。全てが真なら True、ひとつでも偽があれば False。空のイテラブルは True(反例が無いので“すべて満たす”とみなされる)になります。
print(all([1, 2, 3])) # True(非ゼロは真)
print(all([True, False])) # False
print(all([])) # True(空はTrue)
Python基本動作と評価ルール(ここが重要)
真偽値への評価と短絡(ショートサーキット)
all は各要素を bool(…) で真偽値に評価し、False が見つかった時点で処理を止めます(短絡評価)。0、空文字、空リスト、空辞書、None、False は「偽」、それ以外は「真」とみなされます。
values = [1, "", "ok"]
print(all(values)) # False(""が偽、そこで止まる)
Python空は True の理由と使い方
空は「反例がない」ため True になります。「要件を満たすデータが無かったので違反もなかった」と読むことができます。空の扱いが要件上 “False” であってほしい場合は、事前に非空チェックを加えましょう。
nums = []
valid = bool(nums) and all(n > 0 for n in nums) # まず非空を確認
print(valid) # False(非空でないため)
Python条件判定の定番パターン(内包表記・ジェネレータ)
全要素が条件を満たすかを簡潔に書く
要素に対する条件式と組み合わせるのが最もよく使う形です。ジェネレータ式ならメモリ効率も良く、短絡評価で速いです。
nums = [2, 4, 8]
print(all(n % 2 == 0 for n in nums)) # True(全部偶数)
Python文字列・入力のバリデーション
「必須フィールドが全部非空か」「全部フォーマットを満たすか」などに直感的です。
user = {"name": "taro", "email": "taro@example.com"}
print(all(user.get(k) for k in ("name", "email"))) # True(両方非空)
emails = ["a@x", "b@x", "c@x"]
print(all("@" in e for e in emails)) # True(全て '@' を含む)
Python実務での使いどころ(安全な検証と効率設計)
数値範囲・型の一括チェック
「全てが正の数」「全てが指定型」など、複数条件を組み合わせても読みやすいです。
values = [10, 20, 5]
print(all(v > 0 for v in values)) # True
print(all(isinstance(v, int) for v in values)) # True
Pythonネストした構造の一括検査
入れ子のデータでも、欲しい部分を取り出して条件判定を並べれば OK。
store = [
{"name": "coffee", "price": 350},
{"name": "tea", "price": 280},
]
all_under_500 = all(item["price"] < 500 for item in store)
print(all_under_500) # True
Python短絡評価でコスト削減
重い検査の前に軽い検査を置くと、最初の偽で止まるため全体コストを抑えられます。
def heavy(x): # 重い処理の例
return x % 7 == 0
checks = [
lambda x: x > 0, # 軽い
lambda x: x % 2 == 0, # 軽い
lambda x: heavy(x), # 重い
]
x = -4
print(all(f(x) for f in checks)) # False(1つ目で止まる)
Python重要ポイントの深掘り(any との違い・落とし穴回避)
any と対になる関係
- any: ひとつでも真なら True(空は False)
- all: すべてが真なら True(空は True)
「少なくとも一つ」なら any、「全部」なら all と覚えると迷いません。
vals = [True, False]
print(any(vals)) # True
print(all(vals)) # False
Python「非空=真」による誤判定を防ぐ
文字列・リスト・辞書は非空なら True。中身の妥当性を見たいのに「非空だけで真」になると誤判定になります。条件式で中身を明示しましょう。
rows = ["ok", ""]
print(all(rows)) # False("" が偽)
print(all(len(r) >= 2 for r in rows)) # False(長さ基準で検査)
Python空の扱いを要件に合わせる
空で True になる仕様が不都合なら、非空チェックを組み合わせます。
items = []
safe = bool(items) and all(items)
print(safe) # False(非空でないため)
Python例題で身につける(定番から一歩先まで)
例題1:全て非負か
nums = [0, 2, 5]
print(all(n >= 0 for n in nums)) # True
Python例題2:全て小文字か
words = ["coffee", "tea", "latte"]
print(all(w.islower() for w in words)) # True
Python例題3:必須キーが全て存在・非空か
user = {"name": "Hanako", "email": "h@example.com"}
required = ("name", "email")
print(all(user.get(k) for k in required)) # True
Python例題4:全店で在庫ありか(ネスト)
shops = [
{"name": "A", "stock": {"tea": 1}},
{"name": "B", "stock": {"tea": 2}},
]
print(all(s["stock"].get("tea", 0) > 0 for s in shops)) # True
Pythonまとめ
all は「すべてが真なら True」を返す短絡評価の関数で、空は True。ジェネレータ式と組み合わせると、範囲・型・フォーマット・ネスト構造の検証を一行で、安全かつ効率的に書けます。非空=真の挙動を正しく理解し、要件に応じて非空チェックを前置することで、初心者でも誤判定なく読みやすいバリデーションが実装できます。
