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

Python – 두 리스트에서 서로 다른 요소끼리만 쌍 만들기

이 글에서는 두 개의 리스트에서 값이 서로 같은 요소는 제외하고 쌍(pair)을 만드는 방법을 알아보겠습니다. 아래 단계를 따라가며 문제를 해결해 보세요.

문제 해결 순서

  • 요소가 담긴 두 개의 리스트를 초기화합니다.
  • 두 리스트를 순회하면서, 서로 다른 값끼리 만나는 경우에만 쌍을 결과 리스트에 추가합니다.
  • 최종 결과를 출력합니다.

예제 1: 리스트 컴프리헨션 활용

가장 간결하고 파이썬다운 방법은 리스트 컴프리헨션(list comprehension)을 사용하는 것입니다. 코드를 살펴보겠습니다.

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

# 서로 다른 요소끼리만 쌍 생성
result = [(i, j) for i in list_1 for j in list_2 if i != j]

# 결과 출력
print(result)

위 코드를 실행하면 아래와 같은 결과를 얻을 수 있습니다.

출력 결과

[(1, 5), (1, 8), (1, 7), (1, 3), (1, 6), (2, 5), (2, 8), (2, 7), (2, 1), (2, 3), (2, 6), (3, 5), (3, 8), (3, 7), (3, 1), (3, 6), (4, 5), (4, 8), (4, 7), (4, 1), (4, 3), (4, 6), (5, 8), (5, 7), (5, 1), (5, 3), (5, 6)]

출력을 보면 list_1의 요소와 list_2의 요소가 같은 경우(예: (1, 1), (5, 5))는 결과에 포함되지 않은 것을 확인할 수 있습니다.

예제 2: itertools 모듈 활용

표준 라이브러리인 itertools 모듈을 사용해서도 동일한 문제를 해결할 수 있습니다. itertools는 모든 요소의 곱집합(cartesian product)을 만들어 주는 product 메서드를 제공합니다. 먼저 가능한 모든 쌍을 만든 뒤, 조건에 맞는 쌍만 필터링하는 방식입니다.

# 모듈 임포트
import itertools

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

# 모든 쌍 생성
pairs = itertools.product(list_1, list_2)

# 값이 다른 쌍만 필터링
result = [pair for pair in pairs if pair[0] != pair[1]]

# 결과 출력
print(result)

위 코드 역시 앞선 예제와 동일한 결과를 출력합니다.

출력 결과

[(1, 5), (1, 8), (1, 7), (1, 3), (1, 6), (2, 5), (2, 8), (2, 7), (2, 1), (2, 3), (2, 6), (3, 5), (3, 8), (3, 7), (3, 1), (3, 6), (4, 5), (4, 8), (4, 7), (4, 1), (4, 3), (4, 6), (5, 8), (5, 7), (5, 1), (5, 3), (5, 6)]

마무리

이번 글에서는 두 리스트에서 값이 서로 다른 요소끼리만 쌍을 만드는 두 가지 방법을 살펴보았습니다. 리스트 컴프리헨션은 한 줄로 간결하게 처리할 수 있어 직관적이고, itertools.product는 세 개 이상의 리스트를 조합하거나 더 복잡한 반복 작업이 필요할 때 특히 유용합니다. 상황과 코드 스타일에 맞는 방법을 선택해 활용하시면 됩니다.