枚举组合

枚举组合

问题是这样的.

有 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
上一篇:BZOJ 4767: 两双手


下一篇:最新MATLAB R2021b超详细安装教程(附完整安装文件)