【发布时间】:2016-07-25 13:37:46
【问题描述】:
我有一个很大的子字符串列表,我想搜索并查找是否可以连续找到两个特定的子字符串。该逻辑旨在查找第一个序列,如果找到,则查看第二个子字符串并返回所有匹配项(基于 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
(注意:列表已缩短,数据输入已直接替换,以及用于本文和错误跟踪目的的打印输出)
【问题讨论】:
标签: python list if-statement for-loop substring