在 Python 中獲取笛卡爾積
Muhammad Waiz Khan
2023年1月30日
在本教程中,我們將學習在 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]]