본문 바로가기
Python

Python - 리스트(Lists)간 교집합(중복/공통값), 합집합(고유/유일값) 값 확인하기

by 올엠 2024. 4. 12.
반응형

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)

 

반응형