Python 将字符放入字符串的所有组合
我试着做一些我有一个单词的事情,比如说“spark”,我发现所有可能的安排都是用“*”在单词中。例如“S****”、“SPAR*”、“SP*R*”。关于如何在python中做到这一点,有什么想法吗Python 将字符放入字符串的所有组合,python,string,Python,String,我试着做一些我有一个单词的事情,比如说“spark”,我发现所有可能的安排都是用“*”在单词中。例如“S****”、“SPAR*”、“SP*R*”。关于如何在python中做到这一点,有什么想法吗 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
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
,它生成一个包含True
和False
值元组的iterable。每个元组对应于最终结果中的一个条目,其中True
值对应于s
中的一个字母,False
值对应于“*”
内部循环生成单个字符的列表。它迭代zip(s,t)
,将s
的字母与元组t
中的True
/False
值配对。对于每一对,如果x
(来自t
的值)为True
,则选择c
(来自s
的字母)。否则,它将选择“*”
每个单个字符列表中的字母都用“
”连接成字符串。连接(…)
您好,您的第三个示例似乎有一个格式问题,因为用星号标记斜体。你可以用像SP\*R\*@MikeXydas这样的“\”来避开星号,因为我已经编辑过了。刷新页面。谢谢。它可以工作,但是你能解释一下它是如何工作的吗?这需要几分钟的时间lines@PythonyJavay好的,我添加了一个描述。让我知道它是否有意义。