【问题标题】:Unique only cartesian product of several lists几个列表的唯一唯一笛卡尔积
【发布时间】:2013-11-25 14:33:22
【问题描述】:

以下对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] ] 的列表时,这似乎也不起作用

【问题讨论】:

  • 这对我来说很好用。重复产品是什么意思?
  • 它对我不起作用,我找到了答案。人们似乎对此并不感到兴奋。

标签: python list cartesian-product


【解决方案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):
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 2021-06-18
    相关资源
    最近更新 更多