在 Python 中获取笛卡尔积

Muhammad Waiz Khan 2023年1月30日
  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]]