all 함수는 인자로 받은 모든 요소가 참(True)이면 참(True)을 반환하고
하나라도 거짓(False)이면 거짓(False)을 반환한다.
단, all 이라는 함수는 인자로 반복 가능한 (iterable) 자료형을 받는다.
또한 인자로 받은 요소가 비어있는 경우 True를 반환한다.
def all(iterable):
for element in iterable:
if not element:
return False
return True
파이썬의 공식 홈페이지에 있는 all 함수의 구현 코드이다.
각 요소(element)들을 반복문으로 돌면서 요소가 참인지 거짓인지 검사하고 해당 요소가 거짓일 경우 즉시 거짓을 반환한다.
>>> all([1, 2, 3])
True
>>> all([1, 2, 3, 0])
False
>>> all([])
True
any 함수는 인자로 받은 요소 중 하나라도 참(True)이 있으면 True를 돌려주고, 모든 요소가 거짓(False)일 경우에만 False를 돌려준다.
any 함수도 마찬가지로 반복 가능한 (iterable) 자료형을 인자로 받는다.
all과는 반대되는 or 개념으로 생각하면 편하다.
또한 인자로 받은 요소가 비어있는 경우 False를 반환한다.
def any(iterable):
for element in iterable:
if element:
return True
return False
파이썬의 공식 홈페이지에 있는 any 함수의 구현 코드이다.
마찬가지로 각 요소(element)들을 반복문으로 돌면서 요소가 참인지 거짓인지 검사하고 해당 요소가 참인경우 즉시 참을 반환한다.
>>> any([1, 2, 3, 0])
True
>>> any([0, ""])
False
>>> any([])
False
특정 조건을 어떤 리스트에서 체크 해야할 경우 위의 any와 all을 활용하여 간결한 코드를 작성할 수 있다.
def any_or_all(p_list, value, type):
if type == "any":
if any(value == i for i in p_list):
print(f"{value}이(가) 리스트에 존재함")
else:
print(f"{value}이(가) 리스트에 존재하지 않음")
elif type == "all":
if all(value == i for i in p_list):
print(f"모든 리스트가 {value}")
else:
print(f"{value}이(가) 아닌 값이 존재")
temp_list = [1, 2, 3, 4, 5]
value = 3
any_or_all(temp_list, value, "any")
>>> 3이(가) 리스트에 존재함
temp_list = [1, 2, 3, 4, 5]
value = 6
any_or_all(temp_list, value, "any")
>>> 6이(가) 리스트에 존재하지 않음
temp_list = [3, 3, 3, 3, 3]
value = 3
any_or_all(temp_list, value, "all")
>>> 모든 리스트가 3
temp_list = [5, 5, 5, 5, 6]
value = 5
any_or_all(temp_list, value, "all")
>>> 5이(가) 아닌 값이 존재
Enum 클래스안에서 특정 value가 Enum클래스 안에 존재하는 값인지 체크할 수 있는
클래스메소드를 만들어서 활용할수도 있을 것 같다.
from enum import Enum
class TestEnum(Enum):
test1 = 1
test2 = 2
test3 = 3
@classmethod
def has_value(cls, value):
return any(value == test.value for test in TestEnum)
print(TestEnum.has_value(2))
>>> True
print(TestEnum.has_value(4))
>>> False
물론 python에서 제공하는 value in cls.value2member_map 를 이용하여도 된다.
any 함수를 직접 만들어 사용하였으나 any 함수 사용했을 때와 비교하여 성능차이가 난 경우
-> 링크
any 함수에 각각 자료형을 list, set, generator로 대입했을 때의 성능비교
-> 링크