Guy*_*Tal 2 python string generator str-replace
我一直在尝试使用Python解决以下问题,到目前为止没有成功:
假设你有一个字符串'0','1'和'?'.'?' 符号可以是'0'或'1'.您的目标是打印此类给定字符串的所有可能输出.例如,字符串'0?1?'的输出 应该是'0010','0011','0110'和'0111'
我尝试过以下方法:
def comb(S):
if not '?' in S:
yield S
else:
yield comb(S.replace('?','0',1))
yield comb(S.replace('?','1',1))
S = '0?1??011'
S_generator = comb(S)
for s in S_generator:
print s
Run Code Online (Sandbox Code Playgroud)
结果很奇怪,而不是我想要得到的:
<generator object comb at 0x106b2ceb0>
<generator object comb at 0x106b2cf00>
Run Code Online (Sandbox Code Playgroud)
知道为什么它不工作,以及我应该如何更改代码才能工作?
comb() 你做的是一个发电机功能 -
yield comb(S.replace('?','0',1))
Run Code Online (Sandbox Code Playgroud)
该yield语句不会自动循环生成器中的所有值并生成它们,您必须循环遍历这些值并逐个生成它们,示例 -
def comb(S):
if not '?' in S:
yield S
else:
for i in comb(S.replace('?','0',1)):
yield i
for i in comb(S.replace('?','1',1)):
yield i
Run Code Online (Sandbox Code Playgroud)
示例/演示 -
>>> def comb(S):
... if not '?' in S:
... yield S
... else:
... for i in comb(S.replace('?','0',1)):
... yield i
... for i in comb(S.replace('?','1',1)):
... yield i
...
>>> for s in comb('abc?def?'):
... print(s)
...
abc0def0
abc0def1
abc1def0
abc1def1
>>> for s in comb('0?1?'):
... print(s)
...
0010
0011
0110
0111
>>> S = '0?1??011'
>>> for s in comb(S):
... print(s)
...
00100011
00101011
00110011
00111011
01100011
01101011
01110011
01111011
Run Code Online (Sandbox Code Playgroud)
[编辑]:请注意,从Python 3.3开始,您可以使用语法中的新yield:
yield from comb(S.replace('?','0',1))
yield from comb(S.replace('?','1',1))
Run Code Online (Sandbox Code Playgroud)