枚举组合
问题是这样的.
有 n 个列表,分别从每个列表中取出一个元素,一共有多少种组合?
例如:
a = ['a1','a2']
b = ['b1','b2','b3']
组合结果为:
['a1','b1'],
['a1','b2'],
['a1','b3'],
['a2','b1'],
['a2','b2'],
['a2','b3'],
待组合的列表只有两个
这种情况就是简单的遍历:
a = ['a1','a2']
b = ['b1','b2','b3']
res = []
for i in a:
for j in b:
res.append((i,j)])
print(res)
扩展为 n 个
我们可以先将第一个和第二个组合,再拿组合出的结果和第三个组合,依次类推...
如下如所示:
用代码表示如下:
def merge(i,j):
"""
i = "a"
j = ("b","c")
return: ("a","b","c")
"""
res = []
for p in (i,j):
if isinstance(p,tuple):
res.extend(p)
else:
res.append(p)
return tuple(res)
def combineN(*args):
target = args[0]
for li in args[1:]:
tmp = []
for i in target:
for j in li:
tmp.append(merge(i,j))
target = tmp
return target