2016-11-15 48 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