Python에서 데카르트 곱 얻기

Muhammad Waiz Khan 2023년1월30일
  1. itertools 모듈을 사용하여 Python에서 데카르트 곱 얻기
  2. 목록 이해 방법을 사용하여 Python에서 데카르트 곱 얻기
  3. 반복 방법을 사용하여 Python에서 데카르트 곱 얻기
Python에서 데카르트 곱 얻기

이 자습서에서는 Python에서 목록의 데카르트 곱을 얻는 다양한 방법을 배웁니다. 두 집합의 데카르트 곱은 첫 번째 집합의 각 순서쌍의 첫 번째 요소와 두 번째 집합의 두 번째 요소가 있는 모든 가능한 순서쌍의 집합입니다.

Python에서 다음 방법을 사용하여 2D 목록으로 저장된 집합의 데카르트 곱을 찾을 수 있습니다.

itertools 모듈을 사용하여 Python에서 데카르트 곱 얻기

itertools 모듈의 product(*iterables, repeat=1) 메서드는 iterables를 입력으로 사용하고 데카르트 곱을 출력으로 반환합니다. 데카르트 곱 순서는 제공된 인수 iterables에 있는 각 집합/목록의 순서가 됩니다. 선택적 키워드 인수 repeatiterables 입력으로 제품을 반복하려는 횟수를 나타냅니다. 그리고 *iterables 인수의 압축을 푸는 데 사용됩니다.

아래 예제 코드는 itertools.product() 메서드를 사용하여 Python에서 데카르트 곱을 가져오는 방법을 보여줍니다.

from itertools import product

mylists = [["a", "b"], [1, 2]]

for elem in product(*mylists):
    print(elem)

출력:

('a', 1)
('a', 2)
('b', 1)
('b', 2)

목록 이해 방법을 사용하여 Python에서 데카르트 곱 얻기

목록의 총 수가 알려진 경우 목록 이해 방법을 사용하여 목록의 데카르트 곱을 얻을 수 있습니다.

목록의 수를 알고 있거나 목록의 수가 고정되어 있는 경우 for 루프를 사용하여 각 목록 요소를 반복하여 데카르트 곱을 가져와야 합니다.

아래 예제 코드는 목록의 데카르트 곱을 가져오기 위해 Python에서 목록 이해 방법을 사용하는 방법을 보여줍니다.

mylists = [["a", "b"], [1, 2]]

crt_prd = [(x, y) for x in mylists[0] for y in mylists[1]]
print(crt_prd)

출력:

[('a', 1), ('a', 2), ('b', 1), ('b', 2)]

반복 방법을 사용하여 Python에서 데카르트 곱 얻기

Python에서 데카르트 곱을 얻는 또 다른 방법은 반복 for 루프 접근 방식을 사용하는 것입니다. 위에서 사용한 목록 이해보다 더 나은 접근 방식입니다. 이 방법에서는 데카르트 곱에 대한 목록이나 집합의 수에 대해 걱정할 필요가 없습니다.

따라서 각 목록의 각 요소에 액세스하는 대신 반복적 접근 방식을 사용합니다. 아래 예제 코드는 반복 방법을 사용하여 Python에서 데카르트 곱을 찾는 방법을 보여줍니다.

def get_cart_prd(pools):
    result = [[]]
    for pool in pools:
        result = [x + [y] for x in result for y in pool]
    return result


mylists = [["a", "b"], [1, 2, 3]]
print(get_cart_prd(mylists))

출력:

[['a', 1], ['a', 2], ['a', 3], ['b', 1], ['b', 2], ['b', 3]]