python – 列表中元素的顺序是否会导致for循环中的错误?

前端之家收集整理的这篇文章主要介绍了python – 列表中元素的顺序是否会导致for循环中的错误?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在使用一个简单的脚本来逃避某些HTML字符,并且遇到了一个错误,这个错误似乎是由我的列表escape_pairs中的元素顺序引起的.我在循环中不是modifying the lists,所以我想不出任何我在这里忽略的Python /编程原理.

@H_404_5@escape_pairs = [(">","&gt;"),("<","&lt;"),('"',"&quot;"),("&","&amp;")] def escape_html(s): for (i,o) in escape_pairs: s = s.replace(i,o) return s print escape_html(">") print escape_html("<") print escape_html('"') print escape_html("&")

回报

@H_404_5@&amp;gt; &amp;lt; &amp;quot; &amp;

但是当我在escape_pairs列表中切换元素的顺序时,bug就消失了

@H_404_5@>>> escape_pairsMod = [("&","&amp;"),(">","&gt;")] &gt; &lt; &quot; &amp;
最佳答案
是的,在您的第一次实施中,它可以.

让我们看一下>和清单 –

@H_404_5@escape_pairs = [(">","&amp;")]

在遍历escape_pairs时,首先得到>并用& gt;替换它.这导致字符串变为’& gt; .然后你继续迭代,最后你找到(“&”,“& amp;”),然后你替换&在带有& amp;的字符串中,使结果成为你现在得到的结果.

更改列表的顺序时,您将获得正确的结果.但这仍然只是因为你首先考虑到&只有在那之后你还考虑了其​​他.

根据字典,您可以使用str.translate来共同翻译字符串.示例 –

@H_404_5@>>> escape_pairs = [(">","&amp;")] >>> escape_dict = dict(escape_pairs) >>> t = str.maketrans(escape_dict) >>> ">".translate(t) '&gt;' >>> "> & <".translate(t) '&gt; &amp; &lt;'

但是,如果您想要做的是HTML转义字符串,那么您应该使用标准库 – cgi

@H_404_5@>>> import cgi >>> cgi.escape("< > &") '&lt; &gt; &amp;'

此外,如果您使用的是Python 3.2,则可以使用html.escape,例如 –

@H_404_5@>>> import html >>> html.escape("< > &") '&lt; &gt; &amp;'

猜你在找的Python相关文章