2016-11-18 151 views
0

我有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請查看編輯後的版本 –

回答

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,所以不僅是'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

好的。謝謝! –