2016-07-25 77 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)] 
相关问题