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

时间:2016-11-18 20:39:02

标签: python list

我有两个列表,两个格式不同但内容相同。 例如,对列表的第1个元素执行简单的打印命令可执行以下操作:

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

我在这里得到'你'是由于编码..

这种方式由HTML解析器解析prefix_confluence:

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."

但由于显而易见的原因,他们不显示打印消息。 我怎样才能使它们平等?我也试过加入,连接但是无法使它工作。

1 个答案:

答案 0 :(得分:1)

如果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,因此在Python 3中不仅'SEF00'u'SEF00'相等,它们通常应该指向同一个对象,据我所知:

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