如何从集合字典生成可能组合的列表



我是初学者,我有下面的代码

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(。

最新更新