使用带有for循环的列表替换字符串

时间:2015-04-26 09:52:14

标签: python python-3.x for-loop

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

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

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

我一直收到以下错误

TypeError:list indices必须是整数,而不是str

有人可以提前帮助一位兄弟,谢谢!

2 个答案:

答案 0 :(得分: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;'

答案 1 :(得分: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)