Python 为什么发现两个相同的字符串不相等?
我正在尝试在列表中搜索字符串。它们看起来完全一样,但为什么它们不相等呢Python 为什么发现两个相同的字符串不相等?,python,encoding,Python,Encoding,我正在尝试在列表中搜索字符串。它们看起来完全一样,但为什么它们不相等呢 l=['lịu',] a=字节(l[0],编码='utf-8') 印刷品(a) i='李ệu' 打印(字节(i,编码='utf-8')) 打印(i==l[0]) 电流输出: b'li\xc3\xaa\xcc\xa3u' b'li\xe1\xbb\x87u' False 我们如何使其为真?正如您在字节表示中看到的,它们都是不同的字符串: >>> a = 'liệu' >>> b = '
l=['lịu',]
a=字节(l[0],编码='utf-8')
印刷品(a)
i='李ệu'
打印(字节(i,编码='utf-8'))
打印(i==l[0])
电流输出:
b'li\xc3\xaa\xcc\xa3u'
b'li\xe1\xbb\x87u'
False
我们如何使其
为真
?正如您在字节表示中看到的,它们都是不同的字符串:
>>> a = 'liệu'
>>> b = 'liệu'
>>> a == a
True
>>> b == b
True
>>> a == b
False
它们在第三个字母后有所不同:
>>> for l1, l2 in zip(a, b):
... print(l1 == l2)
...
True
True
False
False
这并不意味着u
是不同的,但可以肯定的是e
是不同的
>>> 'ệ'=='ệ'
False
为什么这样?因为它们是不同的字符,但看起来相同,所以您可以检查中的两个字符,u将发现它们具有不同的Unicode
我和你以前有过同样的问题,你可以访问我的复制粘贴第二个
“lịu”
中第一个“lịu”
的。这应该确保两者都是彼此的精确复制品。这肯定会为您提供以下输出:
b'li\xe1\xbb\x87u'
b'li\xe1\xbb\x87u'
True
希望这有帮助 琴弦好像不一样,它们都是“莉”ệ它们不是吗?不,它们不是相同的utf代码。复制并粘贴两个e的字节形式,你会发现它们是不同的。我用Jupyter笔记本在我的机器上运行你的代码,但会产生True
哦,这确实很奇怪,我使用的是升华文本。是否必须安装某种软件包?”ệ'=='̣̣̣̣̣你知道为什么它们可能不同吗?对我正常的眼睛来说,我看不出有什么区别。我通过web scraping获得了列表,这是我在python中键入的另一个字符串,用于与列表进行比较。@LuluVo,可能是您废弃的字符串是用不同的编码编写的。您是如何解决此问题的?我从网页抓取中获得了字符串,因此我必须用一种简单的方法将我自己键入的字符串与我的进行比较,即使它们是不同的字符,我们也可以将其中一个替换为正确的字符。如果您有许多像上面描述的字符,我建议你可以创建一个字符字典来映射它们。@luluvo-解决问题的最简单方法就是使用相同的ệ
用于l
和i
,通过复制粘贴其中一个ệ代码>在另一个li中ệu
。