以下适用于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] ]
以下适用于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] ]
要仅获取唯一元素,您可以使用这样的集合表示法(注意:这不保证顺序)
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
要使您的程序使用列表列表,只需将函数声明从
def cart_product(*somelists):
至
def cart_product(somelists):