2016-07-25 75 views
0

我有大量的子字符串列表,我想要搜索並查找是否可以在一行中找到兩個特定的子字符串。該邏輯旨在查找第一個序列,如果找到,則查看第二個子字符串並返回所有匹配(基於16個字符序列的前15個字符)。如果找不到第一個序列,則只查找第二個序列,最後,如果找不到,則默認爲零。然後將匹配附加到列表中,進一步處理。當前使用的代碼如下:子字符串搜索列表一次返回多個條件

dataA = ['0100101010001000', 
'1001010100010001', 
'0010101000100010', 
'0101010001000110', 
'1010100010001110', 
'0101000100011100', 
'1010001000111010', 
'0100010001110100', 
'1000100011101000', 
'0001000111010000'] 
A_vein_1 = [0,1,0,0,1,0,1,0,1,0,0,0,1,0,0,0] 
joined_A_Search_1 = ''.join(map(str,A_vein_1)) 
print 'search 1', joined_A_Search_1 
A_vein_2 = [1,0,0,1,0,1,0,1,0,0,0,1,0,0,0] 
joined_A_Search_2 = ''.join(map(str,A_vein_2)) 
match_A = [] #empty list to append closest match to 
#Match search algorithm 
for i,text in enumerate(data): 
    if joined_A_Search_1 == text: 
     if joined_A_Search_2 == data[i+1][:-1]: 
      print 'logic stream 1' 
      match_A.append(data[i+1][-1]) 
    if joined_A_Search_1 != text: 
     if joined_A_Search_2 == text[:-1]: 
      print 'logic stream 2' 
      #print 'match', text[:-1] 
      match_A.append(text[-1]) 
print ' A matches', match_A 
try: 
    filter_A = max(set(match_A), key=match_A.count) 
except: 
    filter_A = 0 
    print 'no match A' 
filter_A = int(filter_A) 
print '0utput', filter_A 

的問題是,我得到兩個邏輯流1和邏輯流2,返回時,其實我是想這是一個嚴格的一個或另一個,在這種情況下,只有邏輯流1.輸出的一個例子是這樣的:

search 1 0100101010001000 
search 2 100101010001000 
logic stream 1 
logic stream 2 
logic stream 1 
logic stream 2 
logic stream 2 

(注:該列表已被縮短,並且數據的輸入已被取代的在直接,以及在打印輸出爲以下目的這篇文章和錯誤跟蹤)

回答

0

您的代碼讓我困惑。但是我想我明白你的問題:

#!/usr/env/env python 

dataA = ['0100101010001000', 
'1001010100010001', 
'0010101000100010', 
'0101010001000110', 
'1010100010001110', 
'0101000100011100', 
'1010001000111010', 
'0100010001110100', 
'1000100011101000', 
'0001000111010000'] 
A_vein_1 = [0,1,0,0,1,0,1,0,1,0,0,0,1,0,0,0] 
A_vein_2 = [1,0,0,1,0,1,0,1,0,0,0,1,0,0,0] 

av1_str = "".join(map(str,A_vein_1)) 
av2_str = "".join(map(str,A_vein_2)) 

for i, d in enumerate(dataA): 
    if av1_str in d: 
     print av1_str, 'found in line', i 
    elif av2_str in d: 
     print av2_str, 'found in line', i 

這給了我:

[email protected]:~/code/python/stack_overflow$ python find_str.py 
0100101010001000 found in line 0 
100101010001000 found in line 0 
100101010001000 found in line 1 

編輯ELIF後:

[email protected]:~/code/python/stack_overflow$ python find_str.py 
0100101010001000 found in line 0 
100101010001000 found in line 1 
+0

這段代碼的目的是要找到失蹤最後一位就是第二序列(因此在底部的最大計數代碼)。當兩個邏輯流都對列表filter_A有貢獻時,精度就會丟失。這就是爲什麼它需要嚴格的一個案例或其他。我想它可能被認爲是所需邏輯的或門類型。 – paperstsoap

0

輸入:

dataA = ['0100101010001000', 
'1001010100010001', 
'0010101000100010', 
'0101010001000110', 
'1010100010001110', 
'0101000100011100', 
'1010001000111010', 
'0100010001110100', 
'1000100011101000', 
'0001000111010000'] 
A_vein_1 = [0,1,0,0,1,0,1,0,1,0,0,0,1,0,0,0] 
A_vein_2 = [1,0,0,1,0,1,0,1,0,0,0,1,0,0,0] 

代碼:

av1_str = "".join(map(str,A_vein_1)) 
av2_str = "".join(map(str,A_vein_2)) 

y=[av1_str,av2_str] 

print [(y,dataA.index(x)) for x in dataA for y in dataB if y in x] 

輸出:

[('0100101010001000', 0), ('100101010001000', 0), ('100101010001000', 1)] 
相關問題