比较具有相同值的非相同对象
问题描述:
我有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."
,但他们不显示打印邮件由于显而易见的原因。 我怎样才能让他们平等?我也试过连接,连接,但无法使其工作。
答
如果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'>
严格地说,它们不相等。一方面你有一个字符串,另一个是有一个元素的列表,这是一个Unicode字符串。你如何填充'prefix_confluence'的数据? – eddiem
'prefix_txt [0] = SEF00''SEF00'是指什么?或者这应该是字符串''SEF00''? – elethan
@eddiem请查看编辑后的版本 –