我用以下内容简化了一个更大的复杂问题......
给定三个整数数组,返回每个元素的所有可能组合的最有效方法是什么?请注意,每个数组中的每个值将始终在相同的位置给出,因此[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)
在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实现.
| 归档时间: |
|
| 查看次数: |
488 次 |
| 最近记录: |