我有很长的子列表,我想搜索并查找两个特定子序列出现的次数。以下代码是我开始的:
dataA = ['0000000001001000',
'0000000010010001',
'0000000100100011',
'0000001001000100',
'0000010010001010',
'0000100100010100',
'0001001000101011',
'0010010001010110']
A_vein_1 = [0,0,0,0,1,0,0,1,0,0,0,1,0,1,0,0]
joined_A_Search_1 = ''.join(map(str,A_vein_1))
print 'search 1', joined_A_Search_1
A_vein_2 = [0,0,0,1,0,0,1,0,0,0,1,0,1,0,1]
joined_A_Search_2 = ''.join(map(str,A_vein_2))
print 'search 2', joined_A_Search_2
match_A = [] #empty list to append closest match to
#Match search algorithm
for text in dataA:
if joined_A_Search_1 == text:
if joined_A_Search_2 == dataA[text+1[:-1]]:
print 'logic stream 1'
match_A.append(dataA[text+1[-1]])
if joined_A_Search_2 == text[:-1]:
print 'logic stream 2'
#print 'match', text[:-1]
match_A.append(text[-1])
print 'matches', match_A
try:
filter_A = max(set(match_A), key=match_A.count) #finds most frequent
except:
filter_A = 0 #defaults 0
print 'no match A'
filter_A = int(filter_A)
print '0utput', filter_A
值得注意的是,A_vein_1长度为16个字符,A_vein_2长度仅为15个章程,因此是搜索的原因。我遇到麻烦的是:
if joined_A_Search_2 == dataA[text+1[:-1]]:
我想要做的是查找A_vein_1,如果它在那里,请查看其下的下一个序列以查看前15个章程是否与A_vein_2匹配,如果是,则附加到列表,如果不是,则仅搜索A_vein_2。如果找不到,则默认为零。我相信我有正确的想法,但这个if语句的语法错误。我过去几个月一直在学习Python,所以我还不是很精通。请注意,dataA已缩短,并且A_veins已被手动替换以用于此帖子,并且打印用于跟踪错误。
答案 0 :(得分:0)
我认为你想要的是以下内容。听起来你想在匹配第一次搜索后检查下一个项目。
for i,text in enumerate(dataA):
if joined_A_Search_1 == text:
if joined_A_Search_2 == dataA[i+1][:-1]:
print 'logic stream 1'
match_A.append(dataA[i+1][-1])
enumerate
返回您正在迭代的索引和内容,因此要检查您可以执行的下一项dataA[i+1]
。您需要处理匹配最后一项的第一次搜索的条件,因为data[i+1]
未定义,但这可以帮助您实现您想要的。