2016-07-25 2 views
0

두 개의 특정 하위 문자열을 찾을 수 있는지 검색하고 찾을 수있는 큰 하위 문자열 목록이 있습니다. 논리는 첫 번째 시퀀스를 찾은 다음 찾은 경우 두 번째 하위 문자열을보고 모든 일치를 반환합니다 (16 문자 시퀀스의 처음 15자를 기준으로 함). 첫 번째 시퀀스를 찾을 수없는 경우 두 번째 시퀀스 만 찾고 마지막으로 찾지 못하면 기본값은 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] 
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

코드의 목적은 그 누락 마지막 숫자는 제 2 시퀀스 (하단 따라서 최대 카운트 코드)를 위해 손쉽게 찾을 것이다. 논리 스트림 모두가 filter_A 목록에 기여하면 정확도가 손실됩니다. 그것이 엄격하게 하나의 경우 또는 다른 것을 필요로하는 이유입니다. 나는 이것이 논리의 OR 게이트 유형으로 생각 될 수 있다고 생각한다. – 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] 

코드 :

,363,210
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)] 
관련 문제