python基于动态数量个列表求笛卡尔积

需求
有N个list,分别是listA,listB,listC。。。等等,N的数量不确定,现在对这些list的所有可能组合的值求笛卡尔积,比如 (listA,listB),(listA,listC),(listB,listC),(listA,listB,listC)。。。求这里每个组合的笛卡尔积。

分析
对实现以上需求,可分解为2个部分:
1.求所有list的组合
2.对所有list组合求笛卡尔积

以上2部在python中可通过 combinations 和 product 来实现。
由于list的数量不确定,所组成的list的组合数量不确定,因此需要用python的动态参数方式处理,即(*args)。

实现
将以上内容包装成一个函数实现,话不多说,直接上代码:

from itertools import product, combinations

def find_cartesian_product(*lists):
    all_combinations = []
    for i in range(2, len(lists)+1):
        all_combinations.extend(combinations(lists, i))
    
    cartesian_products = []
    for combination in all_combinations:
        cartesian_products.extend(product(*combination))
    
    return cartesian_products

# 示例用法
listA = [1, 2]
listB = ['a', 'b']
listC = ['x', 'y', 'z']

result = find_cartesian_product(listA, listB, listC)
print(result)
posted @ 2023-10-27 20:32  ik赵云  阅读(131)  评论(0)    收藏  举报