生成所有可能的替换

2024-09-28 01:25:33 发布

您现在位置:Python中文网/ 问答频道 /正文

给定一个替换映射,比如{search: replace, search: replace, ...}和一个字符串,如何生成该字符串所有可能替换的列表(第一个子字符串被替换,第二个子字符串被替换,两者都被替换等等)。示例:

map = {
    'bee': 'BETA',
    'zee': 'ZETA',
    'dee': 'DELTA'
}

source_string = 'bee foo zee bar bee'

desired result = 
[
    'bee foo zee bar bee', 
    'BETA foo zee bar bee', 
    'bee foo ZETA bar bee', 
    'BETA foo ZETA bar bee', 
    'bee foo zee bar BETA', 
    'BETA foo zee bar BETA', 
    'bee foo ZETA bar BETA', 
    'BETA foo ZETA bar BETA'
]

顺序并不重要。在


Tags: 字符串示例mapsource列表searchfoobar
2条回答

Itertools.product可以帮到你。在您的例子中,字符串中的三个单词有二进制选择。所以

itertools.product((0, 1), repeat=3)

会给你8个可能的bee和zee的替代品,其中0表示不替换,1分别表示替换为BETA和ZETA。在

以下是您想要的。在

^{pr2}$

'bee foo zee bar bee'=>;['bee', 'foo', 'zee', 'bar', 'bee']

from itertools import product

repl = {
    'bee': 'BETA',
    'zee': 'ZETA',
    'dee': 'DELTA'
}
source_string = 'bee foo zee bar bee'
p = product(*((x, repl[x]) if x in repl else (x,) for x in source_string.split()))
for x in p:
    print(x)

输出:

^{pr2}$

相关问题 更多 >

    热门问题