Python 코드에서 리스트를 자주 다루는데, 이때 동시에 List에서 중복 값, 고유/유일값을 확인해야 하는 상황이 종종 발생한다.
이때 활용할 수 있는 방법으로 List간 교집합을 하는 방법으로 몇가지가 있는지 알아보도록 하자.
그럼 먼저 쉬운 합집합 부터 확인해보자.
1. 합집합(고유/유일값)
합집합은 두 집합의 속한 중복이 제외된 모든 원소의 집합이라고 할 수 있다.
파이썬에서는 합집합을 쉽게 작성할 수 있는데, 바로 set 함수 이다. 이외에도 | 를 이용해서 포함되는 모든 원소를 확인이 가능하다.
1. | 함수
>>> alist = {1,2,3,4,5}
>>> blist = {4,5,6,7,8}
>>> clist = alist | blist
>>> clist
{1, 2, 3, 4, 5, 6, 7, 8}
2. set 함수
set 함수는 list에서 중복값을 제거해주는 함수이다. 하여 a와 b 리스트를 먼저 합치고 이를 set 함수를 이용하여 유일 값을 반환하는 방식으로 가능하다.
>>> alist = [1,2,3,4,5]
>>> blist = [4,5,6,7,8]
>>> alist.extend(blist)
>>> alist
[1, 2, 3, 4, 5, 4, 5, 6, 7, 8]
>>> clist = set(alist)
>>> clist
{1, 2, 3, 4, 5, 6, 7, 8}
2. 교집합(중복/공통값)
교집합은 두 집합에 공통으로 포함된 원소의 집합이다.
그림으로 표현해보면 둘이 공통적으로 존재하는 값을 의미한다.
이를 파이썬에서는 교집합으로 3가지 방법을 대표적으로 사용할 수 있는데, 하나씩 알아보자.
1. set(), & 함수
& 연산자를 이용하면 공통값을 확인할 수 있다.
>>> alist = {1,2,3,4,5}
>>> blist = {4,5,6,7,8}
>>> clist = alist & blist
>>> clist
{4, 5}
2. intersection 함수
파이썬에서 제공하는 내장함수이다. intersection은 영어로 교집합이라는 의미로 직곽적인 장점이 있다. &와 다르게 직관적인 함수이름으로 가독성이 더 좋은 느낌이다.
>>> alist = {1,2,3,4,5}
>>> blist = {4,5,6,7,8}
>>> clist = alist.intersection(blist)
>>> clist
{4, 5}
3. lambda 함수
지능형 리스트 방식으로 직접 리스트를 비교하는 방식으로 작성이 가능하다. 속도적인 측면에서 장점이 있지만, 확인해야 하는 리스트가 많을 경우 코드 작성의 어려움이 존재할 수 있다.
>>> clist = [x for x in alist if x in blist]
>>> clist
[4, 5]
만약 교집합을 List의 갯수에 따라서 생성하는 함수를 생성하고자 한다면, 다음과 같이 구성이 가능하다.
def intersection_list(*lists):
lists = list(lists)
intersection_list = lists[0]
for lst in lists[1:]:
intersection_list = [x for x in intersection_list if x in lst]
return list(intersection_list)
'Python' 카테고리의 다른 글
Python - Regex 정규식 표현과 직접 함수 구현 (0) | 2024.06.08 |
---|---|
Python - Days, 날짜 Count 쉽게 계산하기 (0) | 2024.04.24 |
Django - MySQL/MariaDB 연결하기 (0) | 2024.04.12 |
Python - SQLAlchemy, NULL/empty Column 포함하기 (0) | 2024.04.12 |
Python - JIRA API 로그인 및 검색하기 (0) | 2024.04.12 |