如何定义一个包含所有可能数字组合的数组?

问题描述 投票:-1回答:1

我想定义一个有给定列数的数组(比如说n=5),数组的每个单元格中的值可以是0或1。我希望创建所有可能的1和0,这意味着,每一行代表一个可能的n元素向量。

换句话说,我希望这个表是这样的。

enter image description here

我知道创建1和0的向量很容易,但是我如何确保这些向量不会在表格中重复,并且所有可能的组合都包含在内(如果我的计算正确的话,表格应该有2**5=32行)。

如何在Python中实现?非常感谢您

python arrays combinations
1个回答
1
投票

用itertools很容易。

itertools.product(*[[0, 1]] * 3)

结果是...

[(0, 0, 0),
 (0, 0, 1),
 (0, 1, 0),
 (0, 1, 1),
 (1, 0, 0),
 (1, 0, 1),
 (1, 1, 0),
 (1, 1, 1)]

1
投票

你可以生成32以内的所有数字,并使用位移将每个数字转换为二进制表示。

combs = [[(n >> p) & 1 for p in range(4, -1, -1)] for n in range(32)]

从而得到 combs 作为。

[
 [0, 0, 0, 0, 0],
 [0, 0, 0, 0, 1],
 [0, 0, 0, 1, 0],
 [0, 0, 0, 1, 1],
 [0, 0, 1, 0, 0],
 [0, 0, 1, 0, 1],
 [0, 0, 1, 1, 0],
 [0, 0, 1, 1, 1],
 [0, 1, 0, 0, 0],
 [0, 1, 0, 0, 1],
 [0, 1, 0, 1, 0],
 [0, 1, 0, 1, 1],
 [0, 1, 1, 0, 0],
 [0, 1, 1, 0, 1],
 [0, 1, 1, 1, 0],
 [0, 1, 1, 1, 1],
 [1, 0, 0, 0, 0],
 [1, 0, 0, 0, 1],
 [1, 0, 0, 1, 0],
 [1, 0, 0, 1, 1],
 [1, 0, 1, 0, 0],
 [1, 0, 1, 0, 1],
 [1, 0, 1, 1, 0],
 [1, 0, 1, 1, 1],
 [1, 1, 0, 0, 0],
 [1, 1, 0, 0, 1],
 [1, 1, 0, 1, 0],
 [1, 1, 0, 1, 1],
 [1, 1, 1, 0, 0],
 [1, 1, 1, 0, 1],
 [1, 1, 1, 1, 0],
 [1, 1, 1, 1, 1]
]

或者,你可以使用一个递归生成函数,

def gimme_combs(n):
    if n == 1: return [[0], [1]]
    lower_combs = gimme_combs(n - 1)
    return [[0] + c for c in lower_combs] + \
           [[1] + c for c in lower_combs]

当与以下函数一起调用时,会得到同样的结果。

combs = gimme_combs(5)
© www.soinside.com 2019 - 2024. All rights reserved.