根据tutorialspoint:
方法replace()返回字符串的副本,在该副本中,出现的旧内容已替换为新内容。 https://www.tutorialspoint.com/python/string_replace.htm
因此可以使用:
>>> text = 'fhihihi'
>>> text.replace('hi', 'o')
'fooo'
有了这个主意,给定一个列表[1,2,3]
和一个字符串'fhihihi'
,可以根据其位置用某种方法用1、2或3替换hi
吗?例如,此理论解决方案将产生:
'f123'
任何解决方案都必须是无限可扩展的。
答案 0 :(得分:2)
您可以在初始字符串中创建一个format string:
>>> text = 'fhihihi'
>>> replacement = [1,2,3]
>>> text.replace('hi', '{}').format(*replacement)
'f123'
答案 1 :(得分:0)
使用re.sub
:
import re
counter = 0
def replacer(match):
global counter
counter += 1
return str(counter)
re.sub(r'hi', replacer, text)
这将比使用str.replace
的任何替代方法快
答案 2 :(得分:0)
使用re.sub
的一种解决方案:
text = 'fhihihi'
lst = [1,2,3]
import re
print(re.sub(r'hi', lambda g, l=iter(lst): str(next(l)), text))
打印:
f123
答案 3 :(得分:0)
其他答案给出了很好的解决方案。如果您想重新发明轮子,这是一种方法。
text = "fhihihi"
target = "hi"
l = len(target)
i = 0
c = 0
new_string_list = []
while i < len(text):
if text[i:i + l] == target:
new_string_list.append(str(c))
i += l
c += 1
continue
new_string_list.append(text[i])
i += 1
print("".join(new_string_list))
使用列表来防止连续的字符串创建。