gpt4 book ai didi

python - 使用 Python 将一个字符替换为多个字符

转载 作者:行者123 更新时间:2023-11-28 19:55:04 24 4
gpt4 key购买 nike

我一直在尝试使用 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

结果很奇怪,不是我想要得到的:

<generator object comb at 0x106b2ceb0>
<generator object comb at 0x106b2cf00>

知道为什么它不起作用,以及我应该如何更改代码才能使其起作用?

最佳答案

comb() 是一个生成器函数,当你这样做时 -

yield comb(S.replace('?','0',1))

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

示例/演示 -

>>> 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

[编辑]:请注意,从 Python 3.3 开始,您可以使用新的 yield from语法:

yield from comb(S.replace('?','0',1))
yield from comb(S.replace('?','1',1))

关于python - 使用 Python 将一个字符替换为多个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31714940/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com