多个列表的唯一唯一笛卡尔积 [英] Unique only cartesian product of several lists
本文介绍了多个列表的唯一唯一笛卡尔积的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
以下代码对于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] ]
推荐答案
-
要仅获取唯一元素,可以使用这样的集合符号(注意:这不保证顺序)
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屋!
查看全文