python3.6中任意数量参数的笛卡尔积

2024-10-03 00:25:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图编写一个python3.6命令行程序,它接受一个或多个列表作为参数,然后返回这些列表的笛卡尔积,可能是以重复数据消除的形式。在

我让它在一个和两个列表参数下正常工作,但我无法想出如何使程序正确地处理三个或更多个参数。在

所需的输出是笛卡尔积,其中包括作为参数在命令行上传递的每个列表。在

这是我目前掌握的代码:

def createArgumentParser():

    from argparse import ArgumentParser

    __parser = ArgumentParser()
    __parser.add_argument("list", type=list, nargs="+", help="List(s) to compute the cartesian product of")
    __parser.add_argument("-u", "--unique", action="store_true", help="Deduplicate lists so that they become sets of unique elements")
    __parser.add_argument("-U", "--Universally_unique", action="store_true", help="Deduplicate the resulting cartesian product so that the final result is a set of unique elements")
    return __parser.parse_args()


def cartesianProduct(__unique, __Universally_unique, *__list):

    from itertools import product

    __cartesianProduct = product([])

    if __unique:
        __cartesianProduct = product(sorted(set(__list[0])), sorted(set(__list[len(__list)-1])))
    else:
        __cartesianProduct = product(__list[0], __list[len(__list)-1])
    if __Universally_unique:
        __cartesianProduct = sorted(set(__cartesianProduct))
        for __element in __cartesianProduct:
            if __element[0] == __element[1]:
            __cartesianProduct.remove(__element)
    return __cartesianProduct


def main():

    __args = createArgumentParser()

    for __element in cartesianProduct(__args.unique, __args.Universally_unique, *__args.list):
        print(__element)

使用命令行参数abc 123 def运行程序将返回以下结果:

^{pr2}$

笛卡尔积中缺少123部分。我该怎么解决呢?在


Tags: 命令行程序addparser列表参数defargs
1条回答
网友
1楼 · 发布于 2024-10-03 00:25:33

要获得列表中所有项的笛卡尔积,可以使用*运算符执行参数解包。这有时被称为“splat”解包。在

from itertools import product

src = ['abc', '123',  'def']
cartesian_product = [''.join(t) for t in product(*src)]
print(cartesian_product)

输出

^{pr2}$

相关问题 更多 >