您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

5b51 2022/1/14 8:23:35 python 字数 3182 阅读 595 来源 www.jb51.cc/python

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

概述

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

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("&")

回报

&amp;gt;
&amp;lt;
&amp;quot;
&amp;

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

>>> escape_pairsMod = [("&","&amp;"),(">","&gt;")]

&gt;
&lt;
&quot;
&amp;

让我们看一下>和清单 –

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

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

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

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

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

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

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

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

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

总结

以上是编程之家为你收集整理的python – 列表中元素的顺序是否会导致for循环中的错误?全部内容,希望文章能够帮你解决python – 列表中元素的顺序是否会导致for循环中的错误?所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶