gpt4 book ai didi

python - 列表中元素的顺序会导致 for 循环中的错误吗?

转载 作者:太空狗 更新时间:2023-10-30 01:21:19 25 4
gpt4 key购买 nike

我正在玩一个简单的脚本来转义某些 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;"),("<","&lt;"),('"',"&quot;"),(">", "&gt;")]

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

最佳答案

是的,在您的第一个实现中,它可以。

让我们以 > 和列表为例 -

escape_pairs = [(">", "&gt;"),("<","&lt;"),('"',"&quot;"),("&","&amp;")]

当遍历 escape_pairs 时,您首先得到 > 并将其替换为 > 。这会导致字符串变为 '> 。然后继续迭代,最后找到 ("&","&") ,然后将字符串中的 & 替换为 & ; ,使结果成为您现在得到的结果。

当您更改列表的顺序时,您会得到正确的结果。但这仍然只是因为您首先考虑了 &,然后才考虑了其他因素。

您可以使用 str.translate 来根据字典正确地翻译字符串。示例 -

>>> escape_pairs = [(">", "&gt;"),("<","&lt;"),('"',"&quot;"),("&","&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 循环中的错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32174862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com