在Python for循环中使用String.Replace

时间:2016-07-28 16:40:49

标签: python string replace

我想使用for循环来使用 string.replace 。这是我的代码:

new = ['p','q','r']
my_str = 'there are two much person a, person b, person c.'
old = ['a','b','c']

for i in range(0,len(old)):
    my_str = string.replace(my_str,old[i],new[i])

print(my_str)

但它给了我错误:

  

TypeError:'str'对象不能解释为整数

期望的输出:

  

有两个人p,人q,人r。

这只是一个例子,我想为10,000个长度列表运行for循环。

3 个答案:

答案 0 :(得分:2)

尝试

new = ['p','q','r']
my_str = 'there are two much person a, person b, person c.'
old = ['a','b','c']

for i in range(len(old)):
    my_str = my_str.replace(old[i],new[i])

print(my_str)

但这可能不是很快

如果旧的条目都是字母,则可以

import re

new = ['p','q','r']
my_str = 'there are two much person a, person b, person c.'
old = ['a','b','c']

word=re.compile(r"\w*") # word characters
old_new=dict(zip(old,new))
ong=old_new.get
my_str=word.sub((lambda s:ong(s,s)),my_str)

print(my_str)

如果条目既旧又新(在较短的解决方案中不可避免),这也避免了双重替换问题

答案 1 :(得分:2)

实际上,我无法重现你的问题;你的代码在Python 2.7上运行良好。但是,有更好的方法来做到这一点。首先,您可以range zipold列表,而不是使用new

for i in range(0,len(old)):
    my_str = string.replace(my_str,old[i],new[i])

但是,这仍然会取代a中的arec中的much,它也可能会替换先前替换中引入的字符,可能不是你想要的。相反,您可以使用re模块,将要替换为|的字符串连接到正则表达式,并使用\b字边界字符对其进行分隔,例如在您的情况下\b(a|b|c)\b,并使用字典查找正确的替换。

d = dict(zip(old, new))
p = r'\b(' + '|'.join(old) + r')\b'
my_str = re.sub(p, lambda m: d.get(m.group()), my_str)

结果:there are two much person p, person q, person r.

答案 2 :(得分:1)

string.replace()在Python 2.x上可用,但在python 3.x中已弃用。

以下是如何在Python 3.x中使用它

  

str.replace(old,new [,count])   返回字符串的副本,其中所有出现的substring old都替换为new。如果给出了可选参数计数,则仅替换第一次计数出现次数。

在您的情况下,它是my_str.replace(old[index], new[index])