Python:递归获取数组的2D数组的置换



我希望递归地获得python中2d数组的所有可能排列。例如,矩阵的平凡情况2行为:

test_array = [[1,2,3,4],
[5,6,7]]
recursions = []
for a in test_array[0]:
for b in test_array[1]:
recursions.append([a,b])

将输出:

[[1, 5], [1, 6], [1, 7], [2, 5], [2, 6], [2, 7], [3, 5], [3, 6], [3, 7], [4, 5], [4, 6], [4, 7]]

我想为一个数组做这件事,这个数组包括任意多个任意长度的数组。我知道某些包(如itertools(可以做到这一点,但我希望能够自己完成这样的任务,以便以后将其扩展到一个更有趣的问题。

这里有很多类似的问题,比如寻找1d数组的排列,但我在其他地方找不到解决方案。

由于您不想使用itertools,因此可以使用递归函数从这里计算笛卡尔乘积

代码

def product(*seqs):
if not seqs:
return [[]]
else:
return [[x] + p for x in seqs[0] for p in product(*seqs[1:])]

用法

product(arr1, arr2, ..., arrN)

测试1(将Test_array拆包到单个阵列(

test_array = [[1,2,3,4],
[5,6,7]
print(product(*test_array))
[(1, 5), (1, 6), (1, 7), (2, 5), (2, 6), (2, 7), (3, 5), (3, 6), (3, 7), (4, 5), (4, 6), (4, 7)]

测试2(将Test_array拆包到单个阵列(

test_array = [[1,2,3,4],
[5,6,7],
[7,8]]
print(product(*test_array))
[(1, 5, 7), (1, 5, 8), (1, 6, 7), (1, 6, 8), (1, 7, 7), (1, 7, 8), (2, 5, 7), (2, 5, 8), (2, 6, 7), (2, 6, 8), (2, 7, 7), (2, 7, 8), (3, 5, 7), (3, 5, 8), (3, 6, 7), (3, 6, 8), (3, 7, 7), (3, 7, 8), (4, 5, 7), (4, 5, 8), (4, 6, 7), (4, 6, 8), (4, 7, 7), (4, 7,8)]

测试3(多个阵列(

print(product([1, 2, 3], [4, 5], [6, 7, 8, 9]))
[[1, 4, 6], [1, 4, 7], [1, 4, 8], [1, 4, 9], [1, 5, 6], [1, 5, 7], [1, 5, 8], [1, 5, 9], [2, 4, 6], [2, 4, 7], [2, 4, 8], [2, 4, 9], [2, 5, 6], [2, 5, 7], [2, 5, 8], [2, 5, 9], [3, 4, 6], [3, 4, 7], [3, 4, 8], [3, 4, 9], [3, 5, 6], [3, 5, 7], [3, 5, 8], [3, 5,9]]

最新更新