首页 > 解决方案 > Python笛卡尔积输出

问题描述

我有以下输入:

input = (['AA', 'BB', 'CC', 'DD'], '4100314')

我希望输出为 ('AA','4100314'), ('BB','4100314'), ('CC','4100314'), ('DD','4100314')

标签: pythoncartesian-product

解决方案


在您的具体示例中,这将起作用:

input1 = ['AA', 'BB', 'CC', 'DD']
input2 = '4100314'

def product(a, b):
    return list(map(lambda x: [x, b], a))

print(product(input1, input2))

输出:

[['AA', '4100314'], ['BB', '4100314'], ['CC', '4100314'], ['DD', '4100314']]

但我认为@Ani 的这个建议要好得多:获取一系列列表的笛卡尔积?

使用该方法的示例如下:

import itertools

input1 = ['AA', 'BB', 'CC', 'DD']
input2 = ['4100314']

def product(a, b):
    out = []
    for element in itertools.product(a, b):
        out.append(element)
    return out
        
print(product(input1, input2))

输出:

[('AA', '4100314'), ('BB', '4100314'), ('CC', '4100314'), ('DD', '4100314')]

这里的主要区别在于,使用第二种方法,您可以输入任意两个数组,它会输出正确的结果,而第一种方法仅适用于数组和单个变量,就像您的用例一样。


推荐阅读