coo*_*328 1 python sequence variations python-3.x
我有一串数字,string="123456789"我想打印所有变化,在数字之间插入加法、减法或什么都不做,得到 100。数字的顺序大多数保持不变。
例子:1+2+3-4+5+6+78+9=100
我什至不知道如何开始。我想列出所有可能的 +-x 组合(x 代表无)并插入每个组合并进行测试,但这似乎需要很长时间。有什么建议?
您可以使用product和zip_longest从itertools模块执行此操作。我们建立所有可能的组合,然后对它们进行评估,仅筛选评估为 100 的组合。
from itertools import product, zip_longest
operations = ['-', '+', '']
s = '123456789'
combinations = (zip_longest(s, ops, fillvalue='') for ops in product(operations, repeat=8))
to_eval = (''.join(i + j for i, j in combination) for combination in combinations)
print([i for i in to_eval if eval(i) == 100])
>>> ['1+2+3-4+5+6+78+9', '1+2+34-5+67-8+9', '1+23-4+5+6+78-9', '1+23-4+56+7+8+9', '12-3-4+5-6+7+89', '12+3-4+5+67+8+9', '12+3+4+5-6-7+89', '123-4-5-6-7+8-9', '123-45-67+89', '123+4-5+67-89', '123+45-67+8-9']
Run Code Online (Sandbox Code Playgroud)
eval()本质上并不是坏事,只是如果任何用户输入可以进入您正在评估的事物中,它就会导致重大的安全问题(这里不是这种情况)。为个人项目执行此操作很好。在生产环境中,您可能希望自己解析字符串或找到不同的方法。
优化注意事项看这里:Most pythonic way to interleave两个字符串