在 Python 中獲取笛卡爾積

Muhammad Waiz Khan 2023年1月30日 2021年10月2日
  1. 在 Python 中使用 itertools 模組獲取笛卡爾積
  2. 在 Python 中使用列表推導方法獲取笛卡爾積
  3. 在 Python 中使用迭代方法獲取笛卡爾積
在 Python 中獲取笛卡爾積

在本教程中,我們將學習在 Python 中獲取列表的笛卡爾積的不同方法。兩個集合的笛卡爾積將是所有可能的有序對的集合,每個有序對的第一個元素來自第一組,第二個元素來自第二組。

我們可以在 Python 中使用以下方法找到儲存為 2D 列表的集合的笛卡爾積。

在 Python 中使用 itertools 模組獲取笛卡爾積

itertools 模組的 product(*iterables, repeat=1) 方法將 iterables 作為輸入並返回其笛卡爾積作為輸出。笛卡爾積順序將是提供的引數 iterables 中每個集合/列表的順序。可選的關鍵字引數 repeat 表示我們想要重複輸入 iterables 的產品的次數。* 用於解包引數 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]]