多个列表的唯一唯一笛卡尔积 [英] Unique only cartesian product of several lists

查看:99
本文介绍了多个列表的唯一唯一笛卡尔积的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下代码对于cart_product([1,2,3], [a,b,c], [v])很好,不是还会返回重复的笛卡尔积,如果是,如何获得唯一的笛卡尔积?

The following works well for cart_product([1,2,3], [a,b,c], [v]), doesn't it also return duplicate cartesian product, if so, how to get unique cartesian products?

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

当我传递包含列表[ [1,2,3],[a,b,c],[v] ]

推荐答案

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

return list({element for element in itertools.product(*somelists)})

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

or as per Paul Draper's comment we can do it like this

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

  • 要使您的程序可以使用列表列表,只需将函数声明从更改为

  • To make your program work with list of lists, just change the function declaration from

    def cart_product(*somelists):
    

    def cart_product(somelists):
    

  • 这篇关于多个列表的唯一唯一笛卡尔积的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆