파이썬에는 any와 all이 있습니다. 최근에 배웠던 함수인데요. 간단하게 알아보겠습니다.

 


 먼저 any 함수입니다. iterable한 것을 인풋으로 받는데요. 하나라도 참이면 true를 리턴합니다. 비어 있으면 false입니다.

 

 예제 코드를 보겠습니다. 1번째는 list에 True가 하나 있습니다. 그리고 2번째 리스트에는 True가 없습니다. 당연하게도, any의 리턴값은 True, False가 되겠네요. 정말 그렇게 나올까요?

 

 

 네. 정말 그렇게 나왔습니다. 어떠한 리스트에서 특정한 아이템들 중 하나라도 있는지를 판단할 때 꽤 유용하게 쓸 수 있습니다. 예를 들어, large에 small에 있는 원소들 중 하나라도 있는지를 테스트 하고 싶습니다. 이것을 어떻게 구현하는지 생각의 흐름을 보도록 할게요.

 

 

 먼저, 위에 있는 코드는 large에 있는 원소들을 모두 뽑아옵니다.

 

 이건 어떤가요? 뭔가 어려워 보이는데, 사실 별 건 없습니다. list large에 있는 x를 뽑아왔는데, 적용할 결과가 x in small입니다. 즉, 1이 small에 있는지, 4가 small에 있는지, ... 18이 small에 있는지를 쭉 보는 것입니다. 어? 그러면, 결과가 어떻게 나올까요?

 

 

 요래 나오겠네요. 3번째가 True인 이유는 원소 5는 small에 있기 때문입니다. 이제 아래 코드를 보겠습니다.

 

 

 이 코드의 결과는 어떻게 나올까요? large에 있는 x에 대해서 x in small 연산을 수행한다. 결국 large에 있는 원소 중에 어느 하나라도 small에 포함되는가를 묻고 있어요. 그런가요? 네. 5가 그러합니다. 따라서, 결과는 True가 나옵니다. 물론 이런 식으로 작성하시는 경우, large와 small이 매우 커지는 경우, 비효율적으로 동작하니 적절한 자료구조를 찾는 게 좋아보입니다.

 

 


 반면에 all 함수는 iterable한 객체가 비어 있거나, 혹은 모두 True인 경우에만 참을 리턴합니다. 그렇지 않으면 거짓을 리턴해 버립니다. 예제를 보겠습니다.

 

 

 large에 있는 x에 대해서 (x in small) 을 수행한 결과를 리스트에 먼저 담아요. 그리고 그 리스트를 all에 넣는데요. 이것은 large에 있는 원소 모두가 small에 있는지를 질문합니다. 그런가요? 5는 small에 포함되어 있지만, 1은 그렇지 않습니다. 따라서 False가 리턴됩니다.

 

 

 정말 그런지 보니까 False가 리턴된 것을 볼 수 있었어요.