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

Python으로 두 리스트의 모든 순열 조합 구하기: 완벽 가이드

Python 프로그래밍에서 두 개의 리스트가 있을 때, 첫 번째 리스트의 각 요소를 두 번째 리스트의 각 요소와 조합해야 하는 경우가 자주 발생합니다. 예를 들어, 가능한 모든 좌표 쌍을 만들거나 여러 옵션의 조합을 생성할 때 유용합니다. 이 글에서는 이러한 순열(조합)을 구하는 두 가지 대표적인 방법을 소개합니다.

방법 1: 중첩 For 루프 사용하기

가장 직관적인 방법은 중첩된 for 루프를 활용하는 것입니다. 바깥쪽 for 루프는 첫 번째 리스트를 순회하고, 안쪽 for 루프는 두 번째 리스트를 순회하면서 각 요소의 조합을 리스트에 담습니다. 파이썬의 리스트 컴프리헨션(list comprehension)을 사용하면 코드를 한 줄로 간결하게 작성할 수 있습니다.

예제 코드

A = [5, 8]
B = [10, 15, 20]

print("주어진 리스트 : ", A, B)
permutations = [[m, n] for m in A for n in B]
print("순열 결과 : ", permutations)

실행 결과

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

주어진 리스트 : [5, 8] [10, 15, 20]
순열 결과 : [[5, 10], [5, 15], [5, 20], [8, 10], [8, 15], [8, 20]]

리스트 A의 첫 번째 요소인 5부터 시작하여 B의 모든 요소와 차례대로 짝을 이루고, 그다음 8이 같은 방식으로 B의 모든 요소와 조합됩니다. 결과적으로 총 2 × 3 = 6개의 조합이 생성됩니다.

방법 2: itertools 모듈의 product 함수 사용하기

Python 표준 라이브러리인 itertools 모듈에는 product()

예제 코드

import itertools

A = [5, 8]
B = [10, 15, 20]

print("주어진 리스트 : ", A, B)
result = list(itertools.product(A, B))
print("순열 결과 : " + str(result))

실행 결과

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

주어진 리스트 : [5, 8] [10, 15, 20]
순열 결과 : [(5, 10), (5, 15), (5, 20), (8, 10), (8, 15), (8, 20)]

itertools.product()list()

두 방법의 비교 및 활용 팁

  • 중첩 for 루프: 로직이 명시적이라 초보자가 이해하기 쉽고, 조건문을 추가하거나 결과 형태를 자유롭게 커스터마이징할 수 있습니다.
  • itertools.product(): 코드가 간결하고 성능이 최적화되어 있으며, 세 개 이상의 리스트 조합도 손쉽게 처리할 수 있습니다. 예를 들어 itertools.product(A, B, C)
  • repeat 옵션: itertools.product(A, repeat=2)

리스트가 많아지거나 조합 규모가 커질수록 itertools.product()를 사용하는 것이 가독성과 유지보수 측면에서 훨씬 유리합니다. 반면 단순한 두 리스트 조합이라면 리스트 컴프리헨션도 충분히 좋은 선택입니다.