我是初学者,我有下面的代码
def PossibleNum(List):
DefaultSymbol = '%'
NumDict = ["0","1","2","3","4","5","6","7","8","9"]
FinishList = []
for Item in List:
for i in range(len(NumDict)):
_item = Item.replace(DefaultSymbol,NumDict[i])
FinishList.append(_item)
return FinishList
List = ["AAAA%%","BBB%%%","CC%%C%"]
print (PossibleNum(List))
我试图通过将"%"中的每一个替换为每个可能的 NumDict 来从 NumDict 中获取每个可能的组合
所需输出 :[AAAA00,AAAA01,AAAA02,AAAA03....,AAAA99]
电流输出 :[AAAA11,AAAA22,AAAA33,AAAA,44,AAAA55,AAAA66]
您可以使用count
参数设置为 1 的str.replace
。为了获得组合,我使用了str.format
方法。
例如:
lst = ["AAAA%%","BBB%%%","CC%%C%"]
output = []
for i in lst:
n = i.count('%')
backup = i
for v in range(10**n):
i = backup
for ch in '{:0{n}}'.format(v, n=n):
i = i.replace('%', ch, 1)
output.append(i)
# pretty print:
from pprint import pprint
pprint(output)
指纹:
['AAAA00',
'AAAA01',
'AAAA02',
'AAAA03',
...all the way to:
'CC99C5',
'CC99C6',
'CC99C7',
'CC99C8',
'CC99C9']
一个使用itertools.product
获取所有可能插入的选项:
import itertools
l = ["AAAA%%","BBB%%%","CC%%C%"]
DefaultSymbol = '%'
NumDict = ["0","1","2","3","4","5","6","7","8","9"]
out = []
for s in l:
n = s.count(DefaultSymbol)
prod = itertools.product(NumDict, repeat=n)
for p in prod:
tmp = s
for i in p:
tmp = tmp.replace(DefaultSymbol, i, 1)
out.append(tmp)
非常简单;对于每个输入列表元素,获取替换的数量(计数为"%"(,使用itertools.product
计算要插入的所有可能元素,然后迭代所有这些元素(for p in prod
(并进行替换,一次一个(for i in p
,替换计数设置为1(。