all([]) = True và any([]) = False
Hiện tượng lạ
Phần tiêu đề “Hiện tượng lạ”# all() với empty listprint(all([])) # True ✅
# any() với empty listprint(any([])) # False ✅What the Python?! Tại sao all([]) lại True?! 🤔
Giải thích
Phần tiêu đề “Giải thích”Logic toán học
Phần tiêu đề “Logic toán học”all([]) = True - Vacuous truth
Phần tiêu đề “all([]) = True - Vacuous truth”# "Tất cả phần tử đều True?"# Với empty list → Không có phần tử nào False# → Vacuous truth → True
all([]) # Trueall([True, True]) # Trueall([True, False]) # FalseTương tự trong toán học: “Tất cả unicorns đều có cánh” → True (vì không có unicorn nào để phản bác!)
any([]) = False - Không có gì True
Phần tiêu đề “any([]) = False - Không có gì True”# "Có phần tử nào True không?"# Với empty list → Không có phần tử# → False
any([]) # Falseany([False, False]) # Falseany([False, True]) # TrueVí dụ thực tế
Phần tiêu đề “Ví dụ thực tế”all()
Phần tiêu đề “all()”# Kiểm tra tất cả users activeusers = [] # Không có usersall_active = all(user.is_active for user in users)print(all_active) # True ✅
# Hợp lý: "Tất cả users đều active" → True (không có user nào không active)any()
Phần tiêu đề “any()”# Có user nào admin không?users = [] # Không có usershas_admin = any(user.is_admin for user in users)print(has_admin) # False ✅
# Hợp lý: Không có user → Không có adminSo sánh với AND/OR
Phần tiêu đề “So sánh với AND/OR”# all() tương tự ANDall([True, True]) # = True and True = Trueall([]) # = True (identity cho AND)
# any() tương tự ORany([False, True]) # = False or True = Trueany([]) # = False (identity cho OR)Identity elements
Phần tiêu đề “Identity elements”# AND identity = TrueTrue and x == x # Với mọi x
# OR identity = FalseFalse or x == x # Với mọi xThực tế
Phần tiêu đề “Thực tế”Validate inputs
Phần tiêu đề “Validate inputs”def validate_all(items, validator): """Tất cả items phải valid""" return all(validator(item) for item in items)
# Empty list → Tất cả valid (vacuously)validate_all([], lambda x: x > 0) # TrueCheck existence
Phần tiêu đề “Check existence”def has_any_error(results): """Có lỗi nào không?""" return any(r.has_error for r in results)
# Empty → Không có lỗihas_any_error([]) # FalseTóm tắt
Phần tiêu đề “Tóm tắt”all() và any() với empty:
all([])= True (vacuous truth)any([])= False (no evidence)- ✅ Consistent với logic toán học
- ✅ Useful cho edge cases
Nhớ:
all([]) # True - "Không có gì sai"any([]) # False - "Không có gì đúng"Identity elements:
- AND identity = True
- OR identity = False