Python에는 다양한 내장 함수가 있지만, 그중 all()과 any() 함수는 논리 연산을 간단히 처리할 수 있어 매우 유용하다. 특히, iterable 객체를 기반으로 한 조건 검사를 간결하게 표현할 수 있어 코드 가독성을 높이는 데 도움을 준다. 이 포스팅에서는 all()과 any() 함수의 정의, 특징, 사용법을 예제와 함께 알아보겠다.
1. all() 함수란?
all(iterable) 함수는 인자로 받은 반복 가능한 객체(iterable)의 모든 요소가 참(True)이면 True를 반환하고, 하나라도 거짓(False)이면 False를 반환한다. 만약 iterable이 비어 있다면 기본적으로 True를 반환한다. and 연산자와 유사한 동작을 한다고 보면 이해하기 쉽다.
all(iterable)은 내부적으로 아래와 같이 작동한다.
def all(iterable):
for element in iterable:
if not element:
return False
return True
주요 특징
- 반복 가능한 객체(list, tuple, set, dict, str)를 인자로 받는다. (iterable)
- 모든 요소가 True일 때만 True를 반환한다.
- 요소 중 하나라도 False면 즉시 False를 반환한다.
- 인자가 비어 있다면 True를 반환한다.
예제
# 리스트
print(all([1, 2, 3])) # True (모든 요소가 참)
print(all([1, 0, 3])) # False (0은 False로 간주)
# 문자열
print(all("hello")) # True (모든 문자가 참)
print(all("")) # True (비어 있는 iterable은 True)
# 튜플
print(all((True, True))) # True
print(all((True, False))) # False
2. any() 함수란?
any(iterable) 함수는 인자로 받은 반복 가능한 객체(iterable)의 하나라도 참(True)인 요소가 있으면 True를 반환하고, 모든 요소가 거짓(False)일 때만 False를 반환한다. or 연산자와 유사한 동작을 한다.
any(iterable)은 내부적으로 아래와 같이 작동한다.
def any(iterable):
for element in iterable:
if element:
return True
return False
주요 특징
- 반복 가능한 객체를 인자로 받는다. (iterable)
- 하나라도 True이면 즉시 True를 반환한다.
- 모든 요소가 False인 경우에만 False를 반환한다.
- 인자가 비어 있다면 False를 반환한다.
예제
# 리스트
print(any([0, 0, 1])) # True (1이 True)
print(any([0, 0, 0])) # False (모두 False)
# 문자열
print(any("hello")) # True (문자열은 기본적으로 True)
print(any("")) # False (비어 있는 문자열은 False)
# 튜플
print(any((False, True))) # True
print(any((False, False))) # False
3. all()과 any()의 예제
1) 조건 검증
리스트에서 특정 조건을 만족하는지 확인할 때 활용 가능하다.
cur = 3
temp = [1, 3, 6, 2]
# temp 리스트 중 cur보다 큰 값이 있는지 확인
if any(cur < num for num in temp):
print("There exists a number larger than 3") # 출력됨
# temp 리스트의 모든 값이 cur보다 큰지 확인
if all(cur < num for num in temp):
print("All numbers are larger than 3") # 출력되지 않음
2) 성능 비교
리스트에서 특정 조건을 만족하는 값을 찾을 때 sort() 대신 any()를 사용하면 성능을 향상시킬 수 있다.
numbers = [5, 3, 8, 2, 9]
# 어떤 값이 7보다 큰지 확인
print(any(num > 7 for num in numbers)) # True
# 정렬 방식은 불필요한 연산이 많아 비효율적
print(sorted(numbers)[-1] > 7) # True (하지만 느림)
Q) 다음 코드를 실행했을 때 결과는 무엇일까?
print(all(range(3))) # 결과는?
Answer
답: False
range(3)은 [0, 1, 2]로 변환되는데, 이 중 0은 False로 간주되기 때문이다.
만약 range(1, 3)이라면 [1, 2]가 되어 모두 참이므로 결과는 True가 된다.
정리하자면,
- all(): 모든 요소가 True여야 True 반환 (and 연산과 유사)
- any(): 하나라도 True이면 True 반환 (or 연산과 유사)
- 비어 있는 iterable의 경우 all()은 True, any()는 False를 반환
'컴퓨터 공부 > 🐍 Python' 카테고리의 다른 글
deque() vs deque([]), 뭐가 맞는 방식이지? (0) | 2024.11.25 |
---|---|
Rotating 2D matrix - 90, 180, 270 (1) | 2024.11.23 |
정규식을 사용해 여러개의 구분자로 split 하는 방법 (0) | 2024.09.21 |
리스트 원소 중에서 가장 길이가 긴(최대길이) 원소 찾기 (0) | 2024.09.20 |
What is "self" in Python? (2) | 2024.01.08 |