2016-11-15 51 views
0

好的開始讓我們說我有一個列表。蟒蛇列表比較字符串項與 r n

l = ['a', '\r\nb'] 

和已知項搜索。

search = 'b' 

如果鍵入

search in l 

它返回False。但是,如果我輸入。

for item in l: 
    search in item 

我會收到

False 
True 

後者對我來說很有意義,因爲'b''\r\nb'。但是,爲什麼啊,爲什麼是['a', '\r\nb']

+0

搜索值不是按值進行比較的列表,這是正常的 – RomanPerekhrest

+1

'in'只會在列表中搜索完全匹配。 –

+0

你真的關心'\ r \ n'嗎?爲什麼不把'.strip'中的所有東西都放在列表中,所以你是從一個更明智的地方開始的?然後['a','b']'中的''b'將是真實的。目前還不完全清楚爲什麼你會對這種行爲感到驚訝 - 你會期待什麼? 'l.index('b')'是?你認爲它應該在所有時間對每個「項目」進行部分匹配嗎?這將是非常低效的。 – jonrsharpe

回答

1

'b'因爲在第一種情況下(search in l),它會嘗試找到精確匹配爲list與您search一詞的任何元素。

而當你試圖去遞歸通過每個元素的搭配它的發現在該元素,它succseed找到。

+0

好吧,我明白了。 'in'只看它自己的子集。在我看來,在兩個例子中都應該以相同的方式進行比較。我現在明白爲什麼不是這樣。首先,我想我喜歡用\ r \ n做些事情。但它顯然不是。這太愚蠢了。 – Poonuts

1

因爲列表項是「a」和'\ r \ NB的,當你在列表中進行搜索,它的每個項目==「B」,其FALSE比較。

「b」爲在列表中的第二項的子串。 「B」的「\ r \ NB」爲TRUE(你的第二個測試),因爲它搜索字符串「B」的'\ r \ NB的

+0

謝謝。教學解釋。 – Poonuts