为给定的基数和位数生成所有可能的排列

and*_*epd 5 combinations loops

我敢肯定这很简单,但是我很想办法做到这一点。本质上,如果我有一个包含P个列和V ^ P行的数组,那么我该如何填充所有组合,也就是说,本质上是P位以V为底的所有可能数字。例如,对于P = 3和V = 2:

000
001
010
011
100
101
110
111
Run Code Online (Sandbox Code Playgroud)

请记住,这是一个二维数组,而不是整数数组。

对于P = 4和V = 3。

0000
0001
0002
0010
0011
0012
....
Run Code Online (Sandbox Code Playgroud)

生成此数组后,我要开发的其余工作微不足道。因此,对如何执行此操作有一些代码/提示将不胜感激。谢谢。

Eli*_*all 1

以 P=3 和 V=2 为例,在第一列中您需要以下数字序列:

0, 0, 0, 0, 1, 1, 1, 1
Run Code Online (Sandbox Code Playgroud)

因此,您本质上需要四个 0,后跟四个 1。

在第二列中,您需要:

0, 0, 1, 1, 0, 0, 1, 1
Run Code Online (Sandbox Code Playgroud)

因此,您需要两个 0,后跟两个 1,最后再跟相同的 1。

一般来说,在第 n 列中,每个数字需要 V^(Pn),重复 V^(n-1) 次。

当 P=3 且 V=2 时的示例:

第 1 列:我们需要 V^(Pn) = 2^(3-1) = 4 个数字,重复 V^(n-1) = 2^0 = 1 次:

[0, 0, 0, 0, 1, 1, 1, 1]
Run Code Online (Sandbox Code Playgroud)

第 2 列:我们需要每个数字 V^(Pn) = 2^(3-2) = 2,重复 V^(n-1) = 2^1 = 2 次:

[0, 0, 1, 1], [0, 0, 1, 1]
Run Code Online (Sandbox Code Playgroud)

第 3 列:我们需要每个数字 V^(Pn) = 2^(3-3) = 1,重复 V^(n-1) = 2^2 = 4 次:

[0, 1], [0, 1], [0, 1], [0, 1]
Run Code Online (Sandbox Code Playgroud)

生成此序列的一些 Python 代码:

def sequence(v, p, column):
    subsequence = []
    for i in range(v):
        subsequence += [i] * v**(p - column)
    return subsequence * v**(column - 1)
Run Code Online (Sandbox Code Playgroud)