在python中生成二维数组的二维数组

时间:2014-02-13 06:18:47

标签: python list

所以这就是我在Python中尝试的东西。

input = []
for i in range(10):
  n = getBin(i, 4)
  input.append(n)
print input

它给出了:

['0000', '0001', '0010', '0011', '0100', 
 '0101', '0110', '0111', '1000', '1001']

我需要的是:

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

2 个答案:

答案 0 :(得分:1)

itertools.product与(0,1)和4次重复一起使用:

input = [list(x) for x in itertools.product((0, 1), repeat=4)]

如果您使用list tuple而非list s,则可以执行以下操作:

input = list(itertools.product((0, 1), repeat=4))

或者最简单的是,无论如何你都要迭代它,没有必要把它变成list

input = itertools.product((0, 1), repeat=4)

最后,(0, 1)可能是range(2),但这几乎不是改善


itertools.product通常会尝试以您提供的格式返回。因此,通过提供字符串,它返回一个字符串。给它一个列表,它......几乎返回一个列表(返回一个元组)

答案 1 :(得分:1)

您的getBin以字符串格式返回二进制数,我们将每个字符转换为int的整数并返回一个列表。

result = [map(int, getBin(i,4)) for i in range(10)]

例如,

def getBin(number, total):
    return bin(number)[2:].zfill(total)

result = [map(int, getBin(i, 4)) for i in range(10)]

print result

<强>输出

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