【问题标题】:Generating combinations of two strings using Python使用 Python 生成两个字符串的组合
【发布时间】:2013-11-24 14:37:42
【问题描述】:

我有一个字符串 str1 = "ABC",我需要在字符串 str1 中插入 0 到 len(str1) 个“x”,除了最后一个位置。

所以在上面的例子中,我想要一个在字符串之前或内部放置 0 到 2 个“x”的结果列表,看起来像

["ABC",
 "xABC",
 "AxBC",
 "ABxC",
 "xxABC",
 "xAxBC",
 "xABxC",
 "AxxBC",
 "AxBxC",
 "ABxxC"]

我尝试了一些如下代码(我确实意识到我错过了一些组合):

>>> for i in range(1, len(str1)):
...     for k in range(len(str1)):
...         str1[:k]+"x"*i+str1[k:]
... 
'xABC'
'AxBC'
'ABxC'
'xxABC'
'AxxBC'
'ABxxC'
>>> 

我不太确定如何通过两者之间的交错来处理另一种情况,例如xAxBC 等

解决这个问题的最佳方法是什么?

【问题讨论】:

标签: python string concatenation combinations permutation


【解决方案1】:

使用itertools.combinations_with_replacement 获取要插入xs 的索引:

import itertools

str1 = "ABC"
lst = list(str1)
for n in range(len(str1)):
    for idxs in itertools.combinations_with_replacement(range(len(str1)), n):
        xs = lst[:]
        for i in reversed(idxs): # Use reversed, otherwise index become invald
            xs.insert(i, 'x')
        print(''.join(xs))

输出:

ABC
xABC
AxBC
ABxC
xxABC
xAxBC
xABxC
AxxBC
AxBxC
ABxxC

【讨论】:

  • 哇,你太快了,我花了这么长时间才找到它的名字。这是参考:en.wikipedia.org/wiki/…
  • 感谢您的精彩回答!虽然这似乎适用于长度高达 10-15 的字符串,但对于更大的数字,它变得非常缓慢。有什么办法可以加快速度吗?例如,像记忆一样?当在开头添加 x 时,我正在尝试(xABC,AxBC,ABxC)再次重复的行,例如 xxABC,xAxBC,xABxC。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-23
相关资源
最近更新 更多