any()는 Python 내장 함수입니다. 이터러블의 요소 중 하나라도 참(Truthy)이면 True를 반환합니다.
any(iterable) -> bool
# 리스트
any([False, False, True]) # True
any([False, False, False]) # False
any([]) # False — 빈 이터러블
# 다양한 Truthy/Falsy
any([0, "", None, 1]) # True — 1이 Truthy
any([0, "", None, []]) # False — 모두 Falsy
# any()를 직접 구현하면
def any(iterable):
for element in iterable:
if element:
return True # 하나라도 True면 즉시 반환
return False # 끝까지 없으면 False
리스트 vs 제너레이터의 차이:
items = [False, False, True, False, False]
# 리스트 — 모든 요소를 먼저 평가한 뒤 any()에 전달
any([x > 0 for x in items]) # 5개 모두 평가
# 제너레이터 — True 나온 시점에 즉시 중단
any(x > 0 for x in items) # 3번째에서 중단
키워드 목록이 크거나 target 계산 비용이 클수록 제너레이터 방식이 효율적입니다.
any() vs all()values = [True, True, False]
any(values) # True — 하나라도 True
all(values) # False — 모두 True여야 True
# all() 내부 구현
def all(iterable):
for element in iterable:
if not element:
return False # 하나라도 False면 즉시 반환
return True
words = ["apple", "banana", "cherry"]
# 특정 문자 포함 여부
any("an" in w for w in words) # True — "banana"
# 조건 충족 여부
any(len(w) > 6 for w in words) # True — "banana", "cherry"
# 딕셔너리 값 검사
data = {"a": 0, "b": 0, "c": 1}
any(v > 0 for v in data.values()) # True
# 중첩 리스트에서 특정 값 존재 여부
matrix = [[0, 0], [0, 1], [0, 0]]
any(1 in row for row in matrix) # True
all()과 조합records = [
{"name": "Alice", "age": 30},
{"name": "Bob", "age": 25},
]
# 모든 레코드에 "name" 키가 있는지
all("name" in r for r in records) # True
# 하나라도 age가 30 이상인지
any(r["age"] >= 30 for r in records) # True
| 항목 | any() | all() |
|---|---|---|
| 반환 조건 | 하나라도 Truthy | 모두 Truthy |
| 빈 이터러블 | False | True |
| 단락 평가 | 첫 True에서 중단 | 첫 False에서 중단 |
| 권장 인자 | 제너레이터 표현식 | 제너레이터 표현식 |
한 줄 요약:
any()는 이터러블 중 하나라도 Truthy면 즉시True를 반환하는 단락 평가 함수로, 제너레이터 표현식과 함께 쓰면 불필요한 순회를 줄여 효율적인 조건 검사가 가능합니다.