1
현재 두 개의 문자열을 가져 와서 출력의 세 번째 줄에 표시된 것과 일치하는 영역을 식별하는 데 완벽하게 작동하는 아래 코드가 있습니다.중첩 목록을 입력으로 사용하는 방법은 무엇입니까?
첫 번째 일치 문자열이 끝날 때마다 0에서부터 코드의 다음 부분까지 말하고 싶습니다. 주어진 예제에서는 0에서 9까지를 제거합니다. 그러나 0부터 시작하면이 작업을 수행하십시오 . 중첩 된 목록을 사용하여 코드를 수행하는 방법에 대한 설명이 훌륭해 지는지 확신 할 수 없습니다.
from collections import defaultdict
from itertools import groupby
def class_chars(chrs):
if 'N' in chrs:
return 'unknown'
elif chrs[0] == chrs[1]:
return 'match'
else:
return 'not_match'
s1 = 'aaaaaaaaaaN123bbbbbbbbbbQccc'
s2 = 'aaaaaaaaaaN456bbbbbbbbbbPccc'
n = 0
consec_matches = []
chars = defaultdict(int)
for k, group in groupby(zip(s1, s2), class_chars):
elems = len(list(group))
chars[k] += elems
if k == 'match':
consec_matches.append((n, n+elems-1))
n += elems
print chars
print consec_matches
print [x for x in consec_matches if x[1]-x[0] >= 9]
출력 :
defaultdict(<type 'int'>, {'not_match': 4, 'unknown': 1, 'match': 23})
[(0, 9), (14, 23), (25, 27)]
[(0, 9), (14, 23)]
및 어떤 결과물을 원하니? –
중첩 된 목록은 x [1] -x [0]> = 9 인 경우 consec_matches에서 x의 x에 대한 print [x]의 일치 항목을 추출한 결과입니다. 누군가이 출력을 사용하는 방법을 말해 줄 수 있으면 괜찮습니다. 내가 말한대로 0이 목록에 있지만 0 일 경우 숫자를 선택할 수 있기를 원하지만 나는 이것을 수행하는 방법을 모른다. 예를 들면 9가 될 것입니다. – Tom
그룹화를 '[(0, 9), (14, 23), (25, 27)]'로 유지하고 내부 요소에 액세스하거나 하나의 목록으로 모두 병합 하시겠습니까? –