<개인공부>/[Python]

[python] 파이썬 all, any 함수 정리 및 예제

BlockDMask 2020. 10. 1. 00:30
반응형

안녕하세요. BlockDMask 입니다.
예약해 둔 글이 다 떨어져서 다시 글을 써봅니다. 한동안 글을 쌓아놔서 개인 프로젝트를 많이 진행할 수 있었는데, 아쉽습니다.

오늘은 파이썬의 내장함수중에 all 이라는 함수와 any 라는 함수에 대해서 작성해보려 합니다.
이 함수들은 다른 언어에서는 보지 못한 그런 함수들인거 같은데 (있다면 제가 모르는 거겠죠..), 파이썬은 프로그래머가 편하게 개발하라고 미리 많은것들을 만들어 둔것 같습니다.

<목차>
1. 파이썬 all 함수 설명
2. all 함수 예제
3. 파이썬 any 함수 설명
4. any 함수 예제


1. python all 함수란?


정의 : all(iterable) 함수는 인자로 받은 반복 가능한 자료형(iterable)의 모든 요소참(True)이면 참(True)을 반환하는 함수 입니다.

and의 특징을 가진 함수라고 생각하면 도움이 될것 입니다.

다시 풀어서 이야기 하면 all 이라는 함수는 반복 가능한 자료형을 인자로 받으며, 그 안에 있는 모든 요소 하나하나가 다 ~~~ True이어야지 True를 반환하는 함수 입니다.

all(iterable) 함수의 특징을 네줄로 정리하면 이렇습니다.
- 인자로 반복 가능한 (iterable) 자료형을 받는다.
- 인자로 받은 데이터의 모든 요소가 True이어야지 True를 반환한다.
- 인자로 받은 요소중 하나라도 False이면 False를 반환합니다.
- 인자로 받은 요소가 비어있으면 True 입니다.

*여기서 반복가능한 자료형 (Iterable)은 아래와 같은 자료형을 말합니다.
리스트, 튜플, 집합, 딕셔너리, 문자열을 말합니다. (= for문에서 사용가능한 것들)

파이썬 공식 홈페이지에 가면 all 함수에 대해서 코드로 설명해준게 나옵니다.

def all(iterable):
    for element in iterable:
        if not element:
            return False
    return True

바로 이게 all 함수가 구현된 코드 인데요.

def all(iterable):
첫줄을 보면 def 함수를 이용해서 all이라는 이름의 함수를 만들어 주고 매개변수로 (iterable)자료형이 온다는 것을 말해주고 있습니다.

for element in iterable:
두번째 줄
로 가면 이제 for 반복문을 통해서 매개변수로 들어온 iterable 을 요소 하나하나 돌면서 element에 뽑아서 확인한다는 이야기고

if not element:
세번째
if not element: 부분은 이제 element가 참이 아닌가? 를 검사하는 것 입니다.

   return False
만약에 element가 하나라도 참이 아니게 되면 아래 네번째 라인인 return False 를 만나게 되서 all 함수가 False를 반환하게 됩니다.


return True
만약 모든 element가 끝까지 참이라면 for 반복문을 탈출하여 맨 아랫줄인 return True를 만나서 all함수가 True를 반환하게 됩니다.

내부 코드를 보니 함수가 어떻게 동작하는지 이해하기 쉬워지셨죠?


2. python all 함수 예제


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# 파이썬 all 함수 예제들
 
# 리스트
= [1,2,3,4,5]
result = all(a)
print(f'all([1,2,3,4,5]) : {result}')
 
 
# 리스트 요소에 0 -> False 이 있는 경우
= [1,2,0,4,5]
print(f'all([1,2,0,4,5]) : {all(b)}')
 
 
# 리스트가 비어있는 경우
= []
print(f'all([]) : {all(c)}')
 
 
# 문자열
= 'BlockDMask'
print(f'all(\'BlockDMask\') : {all(d)}')
 
 
# 비어있는 문자열
= ''
print(f'all(\'\') : {all(e)}')
 
 
# 튜플
= ('b'3'a')
print(f"all(('b', 3, 'a')) : {all(f)}")
 
# 0이 있는 튜플
= ('b'20'd')
print(f"all(('b', 2, 0, 'd')) : {all(g)}")
 
# 빈 문자열이 있는 튜플
= ('a'''23)
print(f"all(('a', '', 2, 3)) : {all(h)}")
 
# 비어있는 튜플
= ()
print(f"all(()) : {all(i)}")
 
cs

결과창

결과를 보면 all 함수는 중간에 0이나 비어있는 값이 있는 False 값이 하나라도 들어가 있으면 False를 반환하는 것을 확인할 수 있습니다. 즉, 모든 값이 True인 경우에만 True를 반환하는 것을 확인할 수 있습니다.
또한, 인자로 들어온 iterable 자료형이 비어있으면 True를 반환하는 것 또한 확인할 수 있었습니다.
이제 any 함수를 확인하러 가볼까요?


3. python any 함수란?


정의 : any(iterable) 함수는 인자로 받은 반복가능한 자료형(iterable)중 단 하나라도 참(True)이 있으면 참(True)를 반환하는 함수 입니다. 반대로 모든 요소가 거짓(False)인 경우에만 거짓(False)을 반환합니다.

or 의 특징을 가진 함수라 생각하면 이해가 잘 될것 같습니다.

any(iterable) 함수 특징은 5가지로 정리해보겠습니다.
- 반복가능한 자료형(iterable)을 인자로 받습니다.
- 인자로 받은 요소중 하나라도 True이면 True를 반환합니다.
- False가 몇개든 상관없이 단 하나라도 True면 True 반환.
- 모든 요소가 False 인 경우에만 False 반환.
- 인자로 받은 자료형이 비어이는 경우 False를 반환합니다. <- 개인적으로 헷갈리는 특징 이지만 내부 코드를 보면 명확히 이해가 됩니다. 

위에서 언급했지만 all 함수를 보지 않고 바로 3번으로 오신 분들을 위해 다시한번 iterable에 대해 언급하겠습니다.
*여기서 반복가능한 자료형 (Iterable)은 리스트, 튜플, 집합, 딕셔너리, 문자열을 말합니다. (= for문에서 사용가능한 것들)

자 any 함수도 공식 홈페이지에 가서 함수 내부가 어떻게 구현 되어있는지 한번 볼까요?

def any(iterable):
    for element in iterable:
        if element:
            return True
    return False

자 코드를 첫번째 줄부터 하나하나 분석해 봅시다.

def any(iterable):
함수 이름이 any이고 매개변수로 iterable 자료형을 받는 함수를 정의한다.


for element in iterable:
for 반복문을 통해서 매개변수로 받은 iterable의 요소를 하나하나 뽑아서 element 변수를 통해서 분석할 것이다.


if element: 와 return True
만약에 element 가 True이면 if문 아래 return True 코드를 실행할 것 입니다. 이 if문 때문에 element 중 하나만 True 이어도 return True를 반환하게 됩니다.

return Fasle 
반목문을 쭉 돌면서 iterable 자료형의 내부에 있는 요소들을 하나하나 다 확인한 결과 모두 False이거나 비어있었기 때문에 False를 반환합니다.

애초에 iterable이 비어있으면 for 반복문 내부로 들어가지 않기 때문에 iterable이 비어있으면 False를 반환하게 됩니다. 역시 함수 내부를 봐야지 이해가 잘 가네요.


4. python any 함수 예제


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# 파이썬 any 함수 예제들
 
# 리스트
= [1,2,3,4,5]
result = any(a)
print(f'any([1,2,3,4,5]) : {result}')
 
 
# 리스트 요소에 0 -> False 이 있는 경우
= [1,2,0,4,5]
print(f'any([1,2,0,4,5]) : {any(b)}')
 
 
# 리스트가 비어있는 경우
= []
print(f'any([]) : {any(c)}')
 
 
# 문자열
= 'BlockDMask'
print(f'any(\'BlockDMask\') : {any(d)}')
 
 
# 비어있는 문자열
= ''
print(f'any(\'\') : {any(e)}')
 
 
# 튜플
= ('b'3'a')
print(f"any(('b', 3, 'a')) : {any(f)}")
 
# 0이 있는 튜플
= ('b'20'd')
print(f"any(('b', 2, 0, 'd')) : {any(g)}")
 
# 빈 문자열이 있는 튜플
= ('a'''23)
print(f"any(('a', '', 2, 3)) : {any(h)}")
 
# 비어있는 튜플
= ()
print(f"any(()) : {any(i)}")
 
cs

결과창

결과를 보면 any 함수는 하나라도 True이면 True를 반환하는것을 볼 수 있고
iterable로 넘어온 자료형이 비어있으면 False를 반환하는 것을 확인 할 수 있습니다.


이상으로 파이썬 all함수 any함수에 대해서 알아보았습니다. 감사합니다.
참고 문서 : https://docs.python.org/ko/3/library/functions.html

반응형