2015-04-26 37 views
0

我是python的新手,我想用列表中的字符替换字符串中的字符,例如。使用带for循环的列表替换字符串

tagFinder = ['<', '>','&'] 
safeTag = ['&lt;','&gt','&amp'] 

for i in content: 
    return content.replace(tagFinder[i],safeTag[i] 

我不断收到以下错误

类型错误:列表索引必须是整数,而不是str的

可能有人请帮兄弟出来在此先感谢!

回答

3

你可能打算

for i in range(len(tagFinder)): 
    content = content.replace(tagFinder[i],safeTag[i]) 
.......... 
return content 

,而不是

for i in content: 
    return content.replace(tagFinder[i],safeTag[i]) 

,你也过早地退出,因为return语句的循环。 return语句应该是在你的函数的最后一条语句,假设这些声明的函数

但随后始终是更好地使用内置zip这里

for src, dest in zip(tagFinder , safeTag): 
    content = content.replace(src, dest) 
.......... 
return content 

但随后,除非这是作业的一部分,你应该使用标准库来转义你的html字符串。在这种特殊情况下,cgi将会很有用。

>>> import cgi 
>>> cgi.escape(data).encode('ascii', 'xmlcharrefreplace') 
'&lt;&gt;&amp;' 
+0

类型错误: '诠释' 对象不是可迭代 - 我认为这是一个错误? – NubmcNub

+0

@NubmcNub:我的不好。我已经改正了排印错误 – Abhijit

+0

感谢IM几乎没有,但是当我回到它,我得到这个 预计: '<p>的Hello World </P > ' 实际:' &lt; P&ampgtHello世界&lt;/P&ampgt' – NubmcNub

0

如果你在做手工坚持:

tagFinder = ['<', '>','&'] 
safeTag = ['&lt;','&gt','&amp'] 

for tag, safe in zip(tagFinder, safeTag): 
    content = content.replace(tag, safe) 

但是有一个更好的方式来逃避在Python HTML字符:

import cgi 
content = cgi.escape(content)