Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python - 중첩 리스트 간의 교집합 구하는 방법

이 글에서는 여러 개의 리스트를 포함하는 두 개의 리스트(중첩 리스트) 사이의 교집합을 다양한 방법으로 구하는 방법을 알아보겠습니다. 먼저 가장 전통적인 방법부터 시작해 보겠습니다.

방법 1: 리스트 컴프리헨션 활용

다음 단계를 따라 문제를 해결할 수 있습니다.

  • 여러 개의 리스트를 포함하는 두 개의 리스트를 초기화합니다.
  • 첫 번째 리스트를 순회하면서, 현재 항목이 두 번째 리스트에도 존재하는 경우 새로운 리스트에 추가합니다.
  • 결과를 출력합니다.

예제 코드

# 리스트 초기화
list_1 = [[1, 2], [3, 4], [5, 6]]
list_2 = [[3, 4]]

# 두 리스트에서 공통 항목 찾기
result = [sub_list for sub_list in list_1 if sub_list in list_2]

# 결과 출력
print(result)

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

실행 결과

[[3, 4]]

방법 2: set(집합) 활용

이번에는 집합(set) 자료형을 이용해 두 리스트의 교집합을 구해 보겠습니다. 다음 단계를 따릅니다.

  • map 함수를 사용해 두 리스트의 각 하위 리스트를 튜플(tuple)로 변환합니다. 집합은 해시 가능(hashable)한 자료형만 담을 수 있기 때문입니다.
  • intersection 메서드를 사용해 두 집합의 교집합을 구합니다.
  • 결과를 다시 리스트 형태로 변환합니다.
  • 결과를 출력합니다.

예제 코드

# 리스트 초기화
list_1 = [[1, 2], [3, 4], [5, 6]]
list_2 = [[3, 4]]

# 집합 지원을 위해 각 하위 리스트를 튜플로 변환
tuple_1 = map(tuple, list_1)
tuple_2 = map(tuple, list_2)

# 교집합 계산
result = list(map(list, set(tuple_1).intersection(tuple_2)))

# 결과 출력
print(result)

위 코드를 실행하면 동일하게 다음과 같은 결과가 출력됩니다.

실행 결과

[[3, 4]]

마무리

두 가지 방법 모두 중첩 리스트의 교집합을 효과적으로 구할 수 있습니다. 리스트 컴프리헨션은 코드가 직관적이고 가독성이 좋은 반면, set을 활용한 방법은 데이터 양이 많을 때 더 나은 성능을 기대할 수 있습니다. 상황에 맞는 방법을 선택해 사용하시기 바랍니다.

글에 대해 궁금한 점이 있다면 댓글로 남겨주세요.