我被这个看似微不足道的问题难住了......
我想使用 python 获取一串数字(例如 "123"
)并创建一个列表,其中包含所有可能的表达式,其中 "+"
或 "-"
(或什么都没有)可以插入任何数字之间。
例如 "123"
列表将是:
["123","12+3","12-3","1+23","1+2+3","1+2-3","1-23","1-2+3","1-2-3"]
如果数字字符串的长度是N,那么列表应该包含3^(N-1)个字符串。
我觉得这应该递归地完成,但我一直在试图弄清楚如何返回 3 个不同的选项(+、-、无)。
我认为函数的基本情况应该是:
def options(string):
if len(string) == 1:
return string
else:
#This is where I am stuck
最佳答案
这里有一个使用 itertools.product()
的简单但简短的解决方案:
def plus_minus(s):
for t in itertools.product(["", "+", "-"], repeat=len(s) - 1):
yield "".join(itertools.chain.from_iterable(zip(s, t))) + s[-1]
例子:
>>> list(plus_minus("123"))
['123', '12+3', '12-3', '1+23', '1+2+3', '1+2-3', '1-23', '1-2+3', '1-2-3']
这是一个递归的解决方案:
def plus_minus(s):
if len(s) <= 1:
yield s
return
for x in ["", "+", "-"]:
for y in plus_minus(s[1:]):
yield s[0] + x + y
我认为递归解决方案在这里确实更清晰。
关于python - 获取一串数字并插入 + 和 - 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9823797/