子字符串搜索列表一次返回多个条件

时间:2016-07-25 13:37:47

标签: python list if-statement for-loop substring

我有一个很大的子字符串列表,我想搜索并查找是否可以在一行中找到两个特定的子字符串。逻辑用于查找第一个序列,如果找到,则查看第二个子字符串并返回所有匹配(基于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

(注意:列表已缩短,数据输入已直接替换,以及为了本文和错误跟踪的目的而打印出来)

2 个答案:

答案 0 :(得分: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

这给了我:

jcg@jcg:~/code/python/stack_overflow$ python find_str.py
0100101010001000 found in line 0
100101010001000 found in line 0
100101010001000 found in line 1

编辑elif后:

jcg@jcg:~/code/python/stack_overflow$ python find_str.py
0100101010001000 found in line 0
100101010001000 found in line 1

答案 1 :(得分: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)]
相关问题