如何在一组数组中找到所有元素组合?

Kyl*_*yes 1 python algorithm

我用以下内容简化了一个更大的复杂问题......

给定三个整数数组,返回每个元素的所有可能组合的最有效方法是什么?请注意,每个数组中的每个值将始终在相同的位置给出,因此[A,B,C]它们将相同[C,B,A].我想要的结果是一个数组数组,每个哈希包含一个组合.例如:

鉴于:

var array1 = [1,2]
var array2 = [a,b]
var array3 = [foo,bar]
Run Code Online (Sandbox Code Playgroud)

结果将是:

[
  [1,a,foo],
  [2,a,foo],
  [1,b,foo],
  [2,b,foo],
  [1,a,bar],
  [2,a,bar],
  [1,b,bar],
  [2,b,bar]
]
Run Code Online (Sandbox Code Playgroud)

agf*_*agf 8

在Python中,使用itertools.product:

itertools.product(array1, array2, array3)
Run Code Online (Sandbox Code Playgroud)

list如果你需要一个序列,而不仅仅是一个可迭代的,那么将它包装在一个.

如果你想看看它是如何完成的,这是itertools文档中给出的"等效"代码:

def product(*args, **kwds):
    # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
    # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
    pools = map(tuple, args) * kwds.get('repeat', 1)
    result = [[]]
    for pool in pools:
        result = [x+[y] for x in result for y in pool]
    for prod in result:
        yield tuple(prod)
Run Code Online (Sandbox Code Playgroud)

虽然该版本的代码效率不高.

pypy版本的itertools中还有一个Python实现.