我有多个列表,其中一些是重复,我需要所有组合,不包括选择重复列表中相同元素的组合。例如,我有
import itertools
list1 = [1,2,3]
list2 = [4,5,6]
list3 = [4,5,6]
list4 = [7,8,9]
a = [list1,list2,list3,list4]
print list(itertools.product(*a))
输出
(1,4,4,7)
(1,4,4,8)
(1,4,4,9)
(1,4,5,7)
.
.
.
等,正如您所期望的那样,但我想要它做的是输出每个组合,而不重复列表2和3中的元素。像这样:
(1,4,5,7)
(1,4,5,8)
(1,4,5,9)
(1,4,6,7)
(1,4,6,8)
(1,4,6,9)
(1,5,6,7)
(1,5,6,8)
(1,5,6,9)
(2,4,5,7)
.
.
.
我显然希望避免在创建列表后手动删除它们,但是对于如何有效地执行此操作的任何帮助都非常感激。感谢。
答案 0 :(得分:0)
简单的方法是使用过滤器生成表达式:
print list(item for item in itertools.product(*a) if item[1] != item[2])
如果两个项目包含相同的元素,则认为它们相同,并且如果每个项目都保证不包含重复元素,则可以通过将重复项目更改为set
并仅将其添加到list
来丢弃重复项目。 {1}}如果它们尚未包含在其中:
result = []
for item in itertools.product(*a):
if item[1]==item[2]:
continue
item = set(item)
if item not in result:
result.append(item)
print result