我有两个列表,两个格式不同但内容相同。 例如,对列表的第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."
但由于显而易见的原因,他们不显示打印消息。 我怎样才能使它们平等?我也试过加入,连接但是无法使它工作。
答案 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'>