문제풀이 - [Python] 리스트 교집합 - list intersection

Jinho Lee·2024년 6월 5일

도입

  • 백준 30805번 문제 시도 중에 찾은 방법을 기록한다.
  • 다만, 위 문제를 푸는데 도움이 되진 않았다.

개요

  • set을 활용한 방법과 리스트 내 for문 사용을 통한 방법 두 가지를 소개한다.

설명

순서를 유지하며 교집합 구하기

  • 리스트를 for문을 사용해 선언한다.
a = [10,5,3,53,2,6,32]
b = [6,3,2,32]

c = [x for x in a if x in b]
# a에 있는 x가 b에도 있는 경우, c에 들어간다.

print(c)
# 출력 결과 : [3, 2, 6, 32]
  • 위 코드의 결과는 배열 a의 순서에 따른다.

순서 상관없이 교집합 구하기 : set

  • 파이썬의 집합 자료형 set을 사용해 교집합을 구한다.
    • set은 순서가 없어 뒤죽박죽으로 교집합이 생성된다.
    • set은 중복을 허용하지 않기에 여러 개 중복되는 요소를 전부 교집합에 넣을 수는 없다.
  • 아래 예시 코드들의 결과는 set의 형태로 반환된다.

1. set의 비교

a = [1, 3, 5, 7, 9]
b = [10, 5, 1, 2, 4]

c = set(a) & set(b)
# set으로 바꾼 리스트 a와 b를 비교한다.

print(c)
# 출력 결과 : {1, 5}

2. set의 함수 intersection()

a = [10,5,3,53,2,6,32]
b = [6,3,2,32]

c = set(a).intersection(b)
# a와 b의 교집합을 set으로 생성

print(c)
# 출력 결과 : {32, 2, 3, 6} ## 순서 무시

참고

0개의 댓글