假设我想得到三个二进制数字的所有可能组合,即:
0,0,0
0,0,1
0,1,0
0,1,1
1,0,0
1,0,1
1,1,0
1,1,1
我可以这样做:
p = []
for a in range(2):
for b in range(2):
for c in range(2):
p.append([a,b,c])
print p
但是,如果我想定义一个返回n个二进制数字的可能性的函数呢?即如何动态堆叠for循环?
答案 0 :(得分:5)
from itertools import product
product(range(2), repeat=3)
答案 1 :(得分:4)
答案 2 :(得分:2)
没有itertools
解决方案。
def binarydigits(n):
if n == 1:
yield (0,)
yield (1,)
else:
for i in binarydigits(n-1):
for j in binarydigits(1):
yield i+j
答案 3 :(得分:2)
你真的只需要一个循环用于你的特定情况,因为你想要的0和1的序列表示连续的整数:
def allbinary(ndigits):
for n in xrange(2 ** ndigits):
yield map(int, bin(n)[2:].zfill(ndigits))
for x in allbinary(8): print x
请注意,map()
会生成一个列表而不是一个元组,但如果您需要这个元组,则可以将其转换为元组。
但是,在大多数情况下,其他人推荐的itertools.product
是更好的解决方案,包括这个。