我感兴趣的是生成N
变量的所有二进制组合,而不必实现在N上迭代N次并且每次循环遍历N/2
的手动循环,依此类推。
我们在python中有这样的功能吗?
E.g:
我有N
个二进制变量:
pool=['A','B','C',...,'I','J']
len(pool)=10
我想从这些中生成2^10=1024
空格,例如:
[A B C ... I J]
iter0 = 0 0 0 ... 0 0
iter1 = 0 0 0 ... 0 1
iter2 = 0 0 0 ... 1 1
...
iter1022 = 1 1 1 ... 1 0
iter1023 = 1 1 1 ... 1 1
你知道我在这里没有重复,每个变量都按照这些序列启用一次。我怎么能用Python itertools
?
答案 0 :(得分:3)
itertools.product
with the repeat
parameter是最简单的答案:
for A, B, C, D, E, F, G, H, I, J in itertools.product((0, 1), repeat=10):
每个变量的值将在右侧循环最快,在左侧最慢,因此您将获得:
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 1 1
0 0 0 0 0 0 0 1 0 0
等。这可能是您可以识别的:它只是递增10位数的二进制表示。根据您的需要,您可能真的想要做:
for i in range(1 << 10):
然后使用i
屏蔽1 << 9
以获取A
的{{1}},1 << 8
的{{1}}值,依此类推至B
( 1 << 0
为1
。J
。如果目标只是打印它们,你甚至可以通过二进制字符串化,然后使用join
插入分隔符来更聪明:
for i in range(1 << 10):
print(' '.join('{:010b}'.format(i)))
# Or letting print insert the separator:
print(*'{:010b}'.format(i)) # If separator isn't space, pass sep='sepstring'