-2

以下适用于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] ]

4

1 回答 1

1
  1. 要仅获取唯一元素,您可以使用这样的集合表示法(注意:这不保证顺序)

    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
    
  2. 要使您的程序使用列表列表,只需将函数声明从

    def cart_product(*somelists):
    

    def cart_product(somelists):
    
于 2013-11-13T05:48:01.793 回答