안녕하세요! 이번 글에서는 Python의 any()와 all() 함수에 대해 알아보겠습니다. 리스트나 튜플처럼 반복 가능한(iterable) 데이터의 조건을 평가할 때 유용한 함수로, if 문과 함께 자주 사용할 수 있습니다.
기본 개념
1. any() 함수
any(iterable)은 반복 가능한 객체에서 하나라도 True이면 True를 반환합니다.
print(any([False, False, True])) # True
print(any([0, 0, 1])) # True
print(any([0, '', None])) # False
2. all() 함수
all(iterable)은 반복 가능한 객체의 모든 요소가 True일 때만 True를 반환합니다.
print(all([True, True, True])) # True
print(all([1, 2, 3])) # True
print(all([1, 0, 3])) # False
print(all([1, '', 3])) # False
활용 예시
1. 리스트에서 특정 조건 검사
예를 들어, 리스트에서 음수가 하나라도 있는지 확인하려면 any()를 사용하면 됩니다.
numbers = [3, 5, -1, 7, 9]
has_negative = any(n < 0 for n in numbers)
print(has_negative) # True
반대로, 리스트의 모든 값이 양수인지 확인하려면 all()을 사용합니다.
all_positive = all(n > 0 for n in numbers)
print(all_positive) # False (-1이 포함되어 있음)
2. 데이터 검증
예를 들어, 사용자가 입력한 값이 모두 유효한지(all) 또는 하나라도 유효한지(any) 를 판단할 때 활용할 수 있습니다.
user_inputs = ["hello", "world", ""]
print(any(user_inputs)) # True (비어 있지 않은 값이 있음)
print(all(user_inputs)) # False (빈 문자열이 포함되어 있음)
3. 비밀번호 복잡도 검사
any()를 활용해 비밀번호에 특정 조건이 포함되는지 검사할 수 있습니다.
password = "Secure123!"
has_upper = any(c.isupper() for c in password)
has_digit = any(c.isdigit() for c in password)
has_special = any(c in "!@#$%^&*" for c in password)
print(has_upper, has_digit, has_special) # True, True, True
4. 조건에 따라 리스트 필터링
아래 코드에서는 all()을 사용해 모든 조건을 만족하는 요소만 필터링하고, any()를 사용해 하나라도 조건을 만족하는 요소만 필터링합니다.
data = [
{"name": "Alice", "age": 25, "score": 80},
{"name": "Bob", "age": 30, "score": 70},
{"name": "Charlie", "age": 28, "score": 90},
]
# 모든 조건을 만족하는 경우만 필터링
filtered_all = [d for d in data if all(d[k] > 20 for k in ["age", "score"])]
print(filtered_all)
# 하나라도 조건을 만족하는 경우만 필터링
filtered_any = [d for d in data if any(d[k] > 90 for k in ["age", "score"])]
print(filtered_any)

정리
- any(): 하나라도 True면 True
- all(): 모두 True면 True
앞서 소개한 것처럼 any(), all()을 사용하면 Python에서 데이터 필터링, 입력값 검증, 보안 검사 등 다양하게 활용할 수 있습니다. 오늘도 읽어주셔서 감사합니다!