问题是要使用两个相同长度的列表来构建扩展列表。 例如,有
qq=['a','b','c']
ww=['d','e','f']
my_function(qq,ww)
#I want to see output like:
output = [['a','b','c'],['a','b','f'],['a','e','c'],['a','e','f'],['d','e','f'],['d','e','c'],['d','b','f'],['d','b','c']]
制作具有相同长度列表并具有以下约束的所有组合:
重要的是元素在列表中的位置。
因此该函数采用两个相同长度的字符串列表。并返回组合列表。 我该怎么写?
答案 0 :(得分:8)
您希望从2个列表中进行[a,d] * [b,e] * [c,f]
对的乘积。使用zip
进行配对,并使用product
将它们全部组合在一起,整个过程就变得
from itertools import product
def custom_product(valuesA, valuesB):
return list(product(*zip(valuesA, valuesB))) # return list of tuple
def custom_product(valuesA, valuesB):
return list(map(list, product(*zip(valuesA, valuesB)))) # return list of list
CODE DEMO
答案 1 :(得分:1)
这是一个递归解决方案。
当然,基本情况是每个列表只有一个项目,而我们将每个列表作为可能的输出。对于较长的列表,您会发现列表中所有可能的排列方式(不计算第一项),然后将这些项与每个第一项一起返回。
def solve(list1, list2):
if len(list1) != len(list2):
throw ValueError("Lists should be same length")
if len(list1) == 0:
return []
if len(list1) == 1:
return [[list1[0], list2[0]]
children = solve(list1[1:], list2[1:])
return [[list1[0]] + child for child in children] + [[list2[0]] + child for child in children]]