我正在尝试构建一个可以打印所有二进制序列的代码 例如,
->label('Family Name')
我的逻辑是添加' 0'在开始的前半部分输出并添加' 1'到另一半等等。 但是我在使用递归返回2个值时遇到了麻烦 这就是我试过写的:
n=2
output:
00
01
10
11
答案 0 :(得分:3)
你可以写一个发电机:
def binary(n):
if n==0:
yield ''
else:
for i in range(2):
for item in binary(n-1):
yield ('0' if i==0 else '1')+item
list(binary(3)) # ['000', '001', '010', '011', '100', '101', '110', '111']
注意:我删除了前缀,因为您的代码返回了一个后缀。如果您需要该功能,请添加包装函数。
您也可以使用itertools模块:
[''.join(item) for item in itertools.product(*['01' for _ in range(n)])]
答案 1 :(得分:2)
这可能是你想要做的:
def recursive_get_bin_str(s, n):
if n == 0:
print s
else:
for digit in '01':
recursive_get_bin_str(s + digit, n - 1)
使用return的递归将不起作用,因为函数将只返回一个值,您需要多个值。如果您尝试返回多个值,则必须使用某种迭代(元组,列表,双端队列)。以deque为例:
from collections import deque
def linear_get_bin_str(n):
bin_strings = deque([''])
for i in xrange(n):
while len(bin_strings[0]) == i:
bin_str = bin_strings.popleft()
for digit in '01':
bin_strings.append(bin_str + digit)
return bin_strings
答案 2 :(得分:2)
此函数将生成n> 0的字符串,而不是前缀,您可能需要的是列表。
def binary(n,li=["0","1"]):
if n==0:
return []
elif n==1:
return li
lis=[j+i for i in li for j in ["0","1"]]
return binary(n-1,lis)
二进制(2):['00', '10', '01', '11']
二进制(3):['000', '100', '010', '110', '001', '101', '011', '111']
答案 3 :(得分:1)
您可以使用itertools
:
from itertools import product, repeat
for i in product(*repeat('01', n)):
print(''.join(i))
然后你的功能看起来像:
def binary(n):
return [''.join(comb) for comb in product(*repeat('01', n))]
答案 4 :(得分:1)
请尝试以下代码:
def print_binary(prefix,n):
if n==0:
print (prefix)
else:
print_binary((prefix+'0'),n-1)
print_binary((prefix+'1'),n-1)