一尘不染

多个列表的唯一唯一笛卡尔积

python

以下代码适用于cart_product([1,2,3], [a,b,c], [v]),它是否也返回重复的笛卡尔积,如果是,如何获得唯一的笛卡尔积?

import itertools
def cart_product(*somelists):
    for element in itertools.product(*somelists):
        print element

当我传递包含列表的列表时,这似乎也不起作用 [ [1,2,3],[a,b,c],[v] ]


阅读 199

收藏
2021-01-20

共1个答案

一尘不染

  1. 要仅获取唯一元素,可以使用这样的set表示法( 注意: 这不能保证顺序)
    return list({element for element in itertools.product(*somelists)})
    

或根据Paul Draper的评论,我们可以像这样

    list(set(itertools.product(*somelists)))

如果您也想维护订单

    import itertools
def cart_product(somelists):
    result, tempSet = [], set()
    for element in itertools.product(*somelists):
        if element not in tempSet:
        tempSet.add(element)
        result.append(element)
    return result
  1. 要使您的程序可以使用列表列表,只需将函数声明从
    def cart_product(*somelists):
    

    def cart_product(somelists):
2021-01-20