根据列表替换字符串中的子字符串

时间:2019-06-26 18:43:41

标签: python list replace

根据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'

任何解决方案都必须是无限可扩展的。

4 个答案:

答案 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))

使用列表来防止连续的字符串创建。