我有一个函数可以获得像“ABA”这样的字符串吗?问号是一个通配符,可以是A或B,传递的字符串可以有多个通配符。它应该将多个字符串作为一个包含所有可能解决方案的数组。我的代码很慢。我是python的新手,所以找到一个好的解决方案有点困难。
什么时候“ABA?”传递它应该返回['ABAA','ABAB']。
from itertools import product
def possibilities(param):
result = []
for i in product([A,B], repeat=param.count('?')):
string = param
for p in [i]:
for val in p:
string = string.replace('?', str(val), 1)
result.append(string)
return result
答案 0 :(得分:1)
您应该使用generator,以便循环输出。如果你有很多通配符,完整的列表将需要大量的内存来完全存储(它会以指数方式增长!)
import itertools
def possibilties(s):
n_wildcard = s.count('?')
for subs in itertools.product(['A','B'], repeat=n_wildcard):
subs = iter(subs)
yield ''.join([x if x != '?' else subs.next() for x in s])
for p in possibilties('A?BA?'):
print p
这给出了:
AABAA
AABAB
ABBAA
ABBAB