比较具有相同值的非相同对象

问题描述:

我有2个列表,它们都是不同格式但内容相同。 例如,做了列表的第一个元素简单的打印命令执行以下操作:比较具有相同值的非相同对象

prefix_txt[0]=SEF00 
prefix_confluence[0]=[u'SEF00'] 

我得到的“U”这里是由于编码..

的prefix_confluence被解析由HTML解析器以这种方式:

soup=BeautifulSoup(sample,'html.parser') 
for row in soup.find_all('tr')[2:171]: 
    prefix_confluence.append(row.get_text(strip=True, separator='|').split('|')[0:1]) 

现在,我该如何比较和显示这两个列表元素实际上在内容上是相同的? 我已经试过这样:

new=str(prefix_confluence[0]).strip('[u'']') 
if(prefix_txt[0]==new): 
     print "They are same." 

,但他们不显示打印邮件由于显而易见的原因。 我怎样才能让他们平等?我也试过连接,连接,但无法使其工作。

+0

严格地说,它们不相等。一方面你有一个字符串,另一个是有一个元素的列表,这是一个Unicode字符串。你如何填充'prefix_confluence'的数据? – eddiem

+0

'prefix_txt [0] = SEF00''SEF00'是指什么?或者这应该是字符串''SEF00''? – elethan

+0

@eddiem请查看编辑后的版本 –

如果prefix_txt[0]是一个字符串'SEF00'prefix_confluence[0]是包含相同的字符串[u'SEF00']的Unicode版本的列表,那么你应该能够做到以下几点:

new = prefix_confluence[0][0] 
if(prefix_txt[0] == new): 
     print "They are same." 

当你做new = str(prefix_confluence[0]).strip('[u'']')你会得到字符串"'SEF00'",如您所见,与字符串'SEF00'略有不同。相反,您可以通过对列表编制索引来从列表中取出字符串:prefix_confluence[0][0],它将为您提供u'SEF00'。虽然这看起来与'SEF00'不同,但在Python 2.x中,它们看起来是平等的;即,'SEF00' == u'SEF00'True,虽然它们的类型是不同的,他们不指向同一个对象:

>>> a = 'foo' 
>>> b = u'foo' 
>>> a == b 
True 
>>> a is b 
False 
>>> type(a) 
<type 'str'> 
>>> type(b) 
<type 'unicode'> 

以及物品是否完整,相同的解决方案将在Python 3.x的工作,但正在发生的事情略有不同。在Python 3,所有的字符串都是系统默认的Unicode,所以不仅是'SEF00'u'SEF00'在Python 3等,它们一般应指向同一个对象,据我所知:

>>> a = 'foo' 
>>> b = u'foo' 
>>> a == b 
True 
>>> a is b 
True 
>>> type(a) 
<class 'str'> 
>>> type(b) 
<class 'str'> 
+0

你能解释一下我错过了什么或者我哪里出错了吗? –

+0

@AnuragJoshi,没问题,给我一分钟来更新我的答案。 – elethan

+0

好的。谢谢! –