给定一个单词和一个替换字符字典,我需要根据替换字符形成一个字符组合
word = 'accompanying'
substitutions={'c':['$'], 'a': ['4'], 'g': ['9']}
{'a$$ompanyin9', 'ac$ompanyin9','a$companyin9','4ccomp4nying', '4$$omp4nying',
'4$comp4nying','4c$omp4nying', '4ccomp4nyin9', 'a$$ompanying', 'a$companying', 'ac$ompanying',
'accompanyin9', 'accompanying', '4$$omp4nyin9', '4$comp4nyin9', '4c$omp4nyin9','etc.,'}
我写了一个代码,但它并没有提供我所期望的所有组合
from itertools import product
substitutions={'c':['$'], 'a': ['4'], 'g': ['9']}
for key in substitutions.keys():
if key not in substitutions[key]:
substitutions[key].append(key)
wordPossibilities = []
word = 'accompanying'
for substitute in [zip(substitutions.keys(),ch) for ch in product(*substitutions.values())]:
temp=word
for replacement in substitute:
temp=temp.replace(*replacement)
wordPossibilities.append(temp)
print(set(wordPossibilities))
{'4$$omp4nyin9', 'a$$ompanyin9', 'a$$ompanying', 'accompanyin9',
'accompanying', '4ccomp4nyin9', '4$$omp4nying', '4ccomp4nying'}
如果找到替换项,“我的代码”将替换所提供字符串中的所有字符。如何根据索引进行替换以找到所有可能的组合
使用带递归的生成器非常简洁明了:
输出:
但是,
itertools.product
可用于较短的解决方案:输出:
power_set
来自this SO answer。我在一些地方留下了代码“分解”,以便更容易地显示逻辑。您可能希望将最后一个循环包装成一行return
表达式输出:
相关问题 更多 >
编程相关推荐