Python将两个相同的字符串视为不同的字符串
我有两个字符串,从所有迹象来看都是相同的:Python将两个相同的字符串视为不同的字符串,python,string,python-2.7,Python,String,Python 2.7,我有两个字符串,从所有迹象来看都是相同的: x1 = 'N C Soft - NCSOFT_Guild Wars 2 December 2013 :: BNLX_AD_Parallax_160x600' x2 = 'N C Soft - NCSOFT_Guild Wars 2 December 2013 :: BNLX_CT_Parallax_160X600' 但是,检查是否相等表明它们不是 In [312]: if x1 != x2: .....: print 'yep'
x1 = 'N C Soft - NCSOFT_Guild Wars 2 December 2013 :: BNLX_AD_Parallax_160x600'
x2 = 'N C Soft - NCSOFT_Guild Wars 2 December 2013 :: BNLX_CT_Parallax_160X600'
但是,检查是否相等表明它们不是
In [312]: if x1 != x2:
.....: print 'yep'
.....:
yep
我还尝试将这两个字符串从命令提示符中复制出来,并将它们作为新变量粘贴回去,但它们仍然不相等。我80%确定这是因为它们的编码方式很奇怪,插入了一些我看不到的奇怪字符,但使用type()时,两者都显示为字符串
有没有办法让我看到“真实”的字符串?感谢您的帮助。它们不一样;使用将非常清楚地显示这两个值的差异:
>>> import difflib
>>> print '\n'.join(difflib.ndiff([x1], [x2]))
- N C Soft - NCSOFT_Guild Wars 2 December 2013 :: BNLX_AD_Parallax_160x600
? ^^ ^
+ N C Soft - NCSOFT_Guild Wars 2 December 2013 :: BNLX_CT_Parallax_160X600
? ^^ ^
一般来说,当有疑问时,使用查看表示。Python2将对字符串中的任何不可打印或非ASCII字符使用转义符,任何“有趣”字符都会像拇指疼痛一样突出。在Python3中,使用与repr()
相同的结果比较保守,Unicode中充斥着乍一看都一样的字符组合
对于仍然看不到两者之间有什么变化的字符串,上面的
difflib
工具也可以帮助指出到底发生了什么变化。注释在跳过空格方面效果不太好,但是repr()看起来也完全相同啊,你完全正确——我在这里肯定提供了错误的示例。但这个问题仍然存在——让我找一个真实的例子。@DavidYang:Python不会骗你的。查看repr()
输出并比较这些值;像不间断空格这样的差异更为明显。@DavidYang:更新为使用difflib.ndiff
来显示精确的差异。一开始我还忽略了另一个区别,我明白了,我不认为python在撒谎,我只是认为它没有向我展示所有东西。找到两个看起来相同但不相同的字符串已经被证明是相当困难的,因为我不能准确地搜索它。但我能说的是,试图在两个列表之间找到公共字符串不会产生任何结果,但我100%肯定这两个列表有交点,因为一个列表是从另一个列表创建的。嗯,Martijn,我相信第二个差异是造成这一点的真正原因!不知何故,当我用第一个列表创建第二个列表时,它不区分大小写,但现在我正在比较它们,区分大小写很重要!