所以我给了一串可变长度的数字,我需要使用该字符串中的数字找到所有可能的数字组合,其中只有两者之间的数字可以改变,例如:
如果给予 123 ,我需要找到 1x2y3的组合,其中x,y是任意数字。
如果给我 5312 ,我需要找到 5a3b1c2的组合,其中a,b,c是任意数字。
我认为使用python的re.escape
函数可以实现这一点,这就是我的意思:
#Given the digits '123' from STDIN
#create a string "1\d2\d3"
my_regex_string = '\d'.join(input().split())
#Set x as starting point, set y as limit (not the most efficient)
x = 10**(len(my_regex_string)-1) * int(my_regex_string[0])
y = 10**(len(my_regex_string)-1) * (int(my_regex_string[0]) + 1)
while x < y:
if bool(re.match(re.escape(p), str(x)))
print(x)
x+=1
我需要反馈,我的方法有意义吗?这个任务是否可以使用正则表达式,还是需要另一种方法?
答案 0 :(得分:3)
我认为,就像wolfrevokcats所说的那样,这样做的pythonic方法是使用itertools.product函数。类似这样的代码:
from itertools import product
s = input()
r = "{}".join(list(s))
c = [int(r.format(*f)) for f in product(range(0,10), repeat=len(s)-1)]
答案 1 :(得分:1)
这是一个使用itertools的解决方案,可能不是最复杂的,但它可以工作:
>>> import itertools
>>> x = map(lambda z: [s[i] + str(z[i]) for i in range(len(s)-1)] + [s[-1]], list(itertools.product(range(10), repeat=len(s)-1)))
>>> y = map(lambda z: "".join(z), x)
>>> list(y)