所有在字符串中放入字符的组合

问题描述 投票:0回答:1

我想做一件事,我有一个单词,比如说 "spark",我想找到这个单词中带有 "*"的所有可能的排列方式,比如 "S***","SPAR*","SP*R*"。例如 "S****", "SPAR*", "SP*R*". 有什么办法可以让我在python中做到这一点吗?

python string
1个回答
5
投票

这里有一个方法。

import itertools
s = "SPARK"
r = ["".join(c if x else '*' for c, x in zip(s, t)) \
     for t in itertools.product((True, False), repeat=len(s))]

这样可以得到... r 下面的数值。

['SPARK', 'SPAR*', 'SPA*K', 'SPA**', 'SP*RK', 'SP*R*', 'SP**K',
 'SP***', 'S*ARK', 'S*AR*', 'S*A*K', 'S*A**', 'S**RK', 'S**R*',
 'S***K', 'S****', '*PARK', '*PAR*', '*PA*K', '*PA**', '*P*RK',
 '***RK', '***R*', '****K', '*****']

其工作原理如下: 顶层是一个列表理解。 理解的外部循环使用 itertools.product,它产生了一个可迭代的数组 TrueFalse 值。 每个元组对应于最后结果中的一个条目,其中a True 值对应于一个字母,从 s 和a False 值对应于 '*'.

内循环产生一个单字符的列表。 它遍历 zip(s, t)的字母配对,将 s 随着 TrueFalse 元组中的值 t. 对于每一对,如果 x (数值来自 t)是 True,它选择 c (信中提到的 s). 否则会选择 '*'.

每个单字符列表中的字母用 "".join(...).

© www.soinside.com 2019 - 2024. All rights reserved.