在 Python 中获取笛卡尔积
Muhammad Waiz Khan
2023年1月30日
2021年10月2日
在本教程中,我们将学习在 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]]