我有一個字符串,它包含一個固定的字符。我可以通過用另一個字符或字符串替換字符串來生成一個字符串嗎? 說,我有這樣的事情:Python從字符串中有選擇地替換字符
designatedstring="u"
replacerstring="ough"
s="thruput"
我要等的輸出:
l=["throughput","thrupought","throughpought"]
有沒有辦法做到這一點?
我有一個字符串,它包含一個固定的字符。我可以通過用另一個字符或字符串替換字符串來生成一個字符串嗎? 說,我有這樣的事情:Python從字符串中有選擇地替換字符
designatedstring="u"
replacerstring="ough"
s="thruput"
我要等的輸出:
l=["throughput","thrupought","throughpought"]
有沒有辦法做到這一點?
更itertools
糖:
>>> parts = s.split(designatedstring)
>>> num = len(parts) - 1
>>> replacements = itertools.product([designatedstring, replacerstring], repeat=num)
>>> replacements = list(replacements)
>>> replacements.remove((designatedstring,) * num)
>>> for r in replacements:
... print ''.join(itertools.chain(*zip(parts, r + ('',))))
...
thrupought
throughput
throughpought
如果你能在結果與原始字符串承擔,你可以省略4行和5行的醜陋轉換。
你比我快了幾秒鐘! :o +1 – mac
在你的問題中給出的輸入,這將產生請求名單:
s="thruput"
designatedstring="u"
replacerstring="ough"
l = []
for i in range(len(s)):
if s[i] == designatedstring:
l += [s[:i] + replacerstring + s[i + 1:]]
l += [s.replace(designatedstring, replacerstring)]
嘗試用's =「tututu」' – DrTyrsa
@DTTyrsa它會工作,但它不會創建「toughtoughtu」,「toughtutough」和「tutoughtough」字符串。在技術上沒有在問題中指定。 ;) –
這是一個有趣的方式來做到這一點,雖然我仍然與itertools
解決方案。
請注意,您生成的字符串列表在道德上是二叉樹:在字符串中替換字符的每個實例中,您要忽略它(「向左」)或替換它(「向右」)。因此,您可以使用替換字符串創建二叉樹結構。走二叉樹的葉子很容易。
class ReplacementTree(object):
def __init__(self, s, src, target, prefix=""):
self.leaf = src not in s
if 1 == len(s.split(src, 1)):
self.head, self.tail = s, ""
else:
self.head, self.tail = s.split(src, 1)
self.prefix, self.src, self.target = prefix, src, target
@property
def value(self):
if self.leaf:
return self.prefix + self.head
@property
def left(self):
if self.leaf:
return None
else:
return ReplacementTree(self.tail,
self.src,
self.target,
prefix=self.prefix + self.head + self.src)
@property
def right(self):
if self.leaf:
return None
else:
return ReplacementTree(self.tail,
self.src,
self.target,
prefix=self.prefix + self.head + self.target)
def leaves(tree):
if tree.leaf:
yield tree.value
else:
for leaf in leaves(tree.left):
yield leaf
for leaf in leaves(tree.right):
yield leaf
例如:如果指定的更換是UU
>>> x = repltree.ReplacementTree("thruput", "u", "ough")
>>> list(repltree.leaves(x))
['thruput', 'thrupought', 'throughput', 'throughpought']
發生什麼= u和,你要輸出AuuA的輸出有一個或兩個AUUUA? – ideerge