我正在使用python,我相信下面的问题可以使用itertools解决,但如果有其他方法请告诉我。
如果我有一个变量列表(为了便于说明,请将它设为3),每个列表包含一个变量元素集(元素可以是字符串,整数,列表)。
一个例子:
[a,b,c] [d,e,f] [g,h,i]
如何创建(和访问)所有可能的组合(最好是列表),每组只选一个?
即。
并[a,d,G]
并[a,d,H]
并[a,d,i]于
[A,E,G]
...(依此类推)
顺序无关紧要,因此对于输出我不希望[a,d,g]和[d,a,g]都显示,只需要[a,d,g]。
如果我的问题不明确,请告诉我。
此外,如果它有助于我们可以将所有元素视为简单的字符串或整数,但我想要一个解决方案,计算列表的数量和每个列表中的元素数量是可变的这一事实。
答案 0 :(得分:0)
我没有动摇标记为重复,但我认为您需要itertools.product
,如下所述:pick combinations from multiple lists
答案 1 :(得分:0)
您可以使用深度优先搜索来解决它:
def find_all_combinations(lists):
res = set() #set so no duplicates
def dfs(curr_index, curr_combination):
if curr_index == len(lists): #base case - add to results and stop
res.add(tuple(sorted(curr_combination)))
else:
for i in lists[curr_index]: #iterate through each val in cur index
dfs(curr_index + 1, curr_combination + [i]) #add and repeat for next index
dfs(0, [])
return sorted(list(res))
print(find_all_combinations(l))
>>>[('a', 'd', 'g'), ('a', 'd', 'h'), ('a', 'd', 'i'), ('a', 'e', 'g'), ('a', 'e', 'h'), ('a', 'e', 'i'), ('a', 'f', 'g'), ('a', 'f', 'h'), ('a', 'f', 'i'), ('b', 'd', 'g'), ('b', 'd', 'h'), ('b', 'd', 'i'), ('b', 'e', 'g'), ('b', 'e', 'h'), ('b', 'e', 'i'), ('b', 'f', 'g'), ('b', 'f', 'h'), ('b', 'f', 'i'), ('c', 'd', 'g'), ('c', 'd', 'h'), ('c', 'd', 'i'), ('c', 'e', 'g'), ('c', 'e', 'h'), ('c', 'e', 'i'), ('c', 'f', 'g'), ('c', 'f', 'h'), ('c', 'f', 'i')]
此外,所有列表的长度都不一样。