2014-02-13 55 views
-1

我想知道這條件是更好地使用下面的代碼:區別:IF IN和IF ==蟒蛇

這裏是我的兩個列表:

Matrix = ['kys_q1a1','kys_q1a2','kys_q1a3','kys_q1a4','kys_q1a5','kys_q1a6'] 
fixedlist = ['kys_q1a2', 'kys_q1a5'] 

選項1:

for i, topmember in enumerate(Matrix): 
    for fixedcol in fixedlist: 
     if topmember in fixedcol: 
      print i 

OR

選項2:

for i, topmember in enumerate(Matrix): 
    for fixedcol in fixedlist: 
     if topmember == fixedcol: 
      print i 

我明白,比較opertor是匹配字符串,但不是'在'做同樣的?

感謝

回答

4
topmember in fixedcol 

測試如果字符串topmember包含內fixedcol

topmember == fixedcol 

測試,如果該字符串topmember等於fixedcol

因此,'a' in 'ab'將評估True。但'a' == 'ab'將評估False

我想知道哪個條件更好用。

由於兩個變體執行不同的操作,我們不能回答這個問題。您需要選擇執行所需操作的選項。

您的代碼可能會被簡化很多。第二個選項可以減少到:

for i, topmember in enumerate(Matrix): 
    if topmember in fixedlist: 
     print i 

您也可以使用列表理解來查找匹配指數:

[i for i, x in enumerate(Matrix) if x in fixedlist] 

如果你只需要打印索引,而不是將它們存儲在一個列表你可以寫這樣的:

print '\n'.join([str(i) for i, x in enumerate(Matrix) if x in fixedlist]) 

這是你是否喜歡茂密的列表理解的一行或高於,而更詳細的版本口味的問題。

+0

啊我看。在這種情況下,如果我使用「in」,我實際上可以刪除一行「for fixedcol in fixedlist」,只是說「如果topmember in fixedlist」。涼! –

0

如果您想要匹配精確的字符串,那麼使用'=='會很準確。

1

in opeartor用於成員資格測試,==運算符用於平等測試。

一般我們用in進行序列對象的成員測試。並且能夠在字典,集合,元組,列表,字符串等中進行測試。但是它的行爲基於對象類型而有所不同。

字典

它檢查是否有key存在。

>>> d = {'key' : 'value'} 
>>> 'key' in d 
True 
>>> 'k' in d 
False 
>>> 

下它會檢查關鍵引擎蓋存在,集實現是一樣的某些虛擬值字典。

>>> s = set(range(10)) 
>>> 1 in s 
True 
>>> 

列表和元組:

對於列表和元組類型,當且僅當存在一個索引i,使得x == Y [i]爲真中的x y是真實的。

>>> l = range(10) 
>>> 3 in l 
True 
>>> 

字符串

檢查子串是否存在的字符串例如內部。 x中y是真的當且僅當x是y的子串。 !等效測試y.find(X)= - 1

使用定義的數據類型:其定義__contains__()方法

用戶定義的類中,x在y爲真當且僅當y.__contains__(x)是真的。

class Person(object): 
    def __init__(self,name,age): 
     self.name = name 
     self.age = age 
    def __contains__(self, arg): 
     if arg in self.__dict__.keys(): 
      return True 
     else: 
      return False 

obj_p = Person('Jeff', 90) 

print 'Jeff', 'Jeff' in obj_p 
print 'age', 'age' in obj_p 
print 'name', 'age' in obj_p 

我希望你能清楚一些什麼是in的用法。

讓重寫你的代碼片段:

>>> Matrix = ['kys_q1a1','kys_q1a2','kys_q1a3','kys_q1a4','kys_q1a5','kys_q1a6'] 
>>> fixedlist = ['kys_q1a2', 'kys_q1a5'] 
>>> for i in fixedlist: 
...  print i, i in Matrix 
... 
kys_q1a2 True 
kys_q1a5 True 
>>> 

最後讓我們看看一些平等的測試:==

>>> 'a' == 'b' 
False 
>>> 'a' == 'a' 
True 
>>> 'a' == 'ab' 
False 
>>> '' in 'ab' # empty string is treated as a sub-string for any string 
True 
>>> '' == 'ab' # False as they are having different values 
False 
>>> 
>>> 1 == 'ab' 
False 
>>> 1 == 1 
True 
>>> 
+0

這太棒了,非常感謝! –