이 글에서는 두 개의 리스트에서 값이 서로 같은 요소는 제외하고 쌍(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는 세 개 이상의 리스트를 조합하거나 더 복잡한 반복 작업이 필요할 때 특히 유용합니다. 상황과 코드 스타일에 맞는 방법을 선택해 활용하시면 됩니다.