2016-01-20 30 views
1

我尋求幫助的一天。 我有一個字符串的大名單,從13225行文本文件中創建:python 2.7在列表中查找失敗,但迭代列表發現它

with open(dest_file) as f2: 
    content_dest = [line.rstrip('\n') for line in f2] 

我的搜索字符串是mp。 在列表中檢查mp失敗。列表中的所有項都是

<type str> 

當我迭代列表時,發現mp

我沒有看到任何明顯的(再次)爲什麼這是如此。我在列表索引之後,所以我可以通過訪問我在大列表中需要的索引來處理index +處的數據。由於我的迭代'工作',我想我的問題是我如何獲得'mp in list'代碼來實際工作..?和/或爲什麼mp在列表'工作?非常感謝。

mp = 'r1_crvR_2_29040_-8580_180' 
chk = mp in content_dest 
print '**', chk 

for x in content_dest: 
    chk = mp in x 
    if chk: 
     print 'Found:', mp, x 
     print type(mp), type(x) 

for i in range(0, len(content_dest)): 
    chk = mp in content_dest[i] 
    if not chk: 
     pass 
    else: 
     print 'Found:', mp, content_dest[i], i 

結果:

** False 
Found: r1_crvR_2_29040_-8580_180  Name "r1_crvR_2_29040_-8580_180" 
<type 'str'> <type 'str'> 
Found: r1_crvR_2_29040_-8580_180  Name "r1_crvR_2_29040_-8580_180" 11846 

回答

0
mp in list 

這工作原理:檢查字符串是否在列表中。 正如我從上面的代碼可以理解的,你只有一個文件中的行與請求的子字符串。這條線路是:

Name "r1_crvR_2_29040_-8580_180"

爲了便於理解,我會告訴你一個例子:

my_list = ["abc"] 
check = 'a' in my_list 

應該是什麼的check結果呢? 錯誤,當然,因爲我們沒有這個字符串,我們列表中的a。 要驗證是否存在一些字符串其中包括我們的字符串,我們可以這樣做:

double_check = any(['a' in x for x in my_list]) 

double_check會告訴我們,如果沒有在我們的列表中的某些字符串,由請求字符串。

+0

謝謝!所以,如果我從兩個答案都理解,我的代碼失敗,因爲我正在尋找的字符串是列表中的子字符串。檢查每個項目的作品,因爲..好吧,它只是。所以我應該使用這種方法。希望我可以標記兩個答案的權利。 – shawn

+0

只要你願意!主要想法是幫助,而不是得到一個國旗:) – pivanchy

0

是有區別的列表或列表中的項目進行搜索。

例如,a不在名單:

>>> L = ['abc', 'xyz'] 
>>> 'a' in L 
False 

,但它是在列表中的一個項目:

>>> for x in L: 
...  if 'a' in x: 
...  print 'found' 
... 
found 

這裏:

>>> 'a' in L 

相當於:

chk = mp in content_dest 

和你的循環上面的循環。