2012-09-05 4 views
0

긴 바이너리 문자열에서 바이너리 5-mers 수를 찾으려고합니다. 즉, say : seq = '000111100101101'의 문자열이 주어지면 각 5-mer가 몇 번 나타나는지 계산하려고합니다. 내가 충분히 쉽게 모든 32 반복의 목록을 생성 :파이썬 문자열에서 중첩되는 kmers 찾기

import re 
from itertools import product 
combo = [ ''.join(x) for x in product('01', repeat=5) ] 

지금 중복에 각 조합의 발행 수를 세고 내 문제. (즉, 길이 5 : 0 : 4, 1 : 5, 2 : 6, 3 : 7 ... (총 시퀀스 길이 4 창)의 겹치는 창을 체크하고 싶습니다. . 중첩 윈도우를 계산하는 방법으로 그렇게 (콤보를 [내가] = seq.count (i)는 작동하지 않는 것)

덕분에 주어진 서열에 대한

예 원하는 OUPUT :.!

defaultdict
seq: '11111101' 
Combos: (11111 :2 , 11101 :1 , 11110 :1) 

답변

1

간단한 파이썬 구현 :

from collections import defaultdict 
def C(s): 
    d = defaultdict(int) 
    for i in xrange(len(s)-4): 
    d[s[i:i+5]] += 1 
    return d 

C('010100101010101001111010000000001') 
+0

'code'd [s [i : i + 5]]는 정확히 무엇을합니까? (왜 겹치는 부분을 잡을 수 있는지 이해하고 싶습니다. 여러 반복을 키로 사용할 것입니까? (카운트/값뿐만 아니라) – GrimSqueaker

+0

's [i : i + 5]'는 문자열's'의 부분 문자열입니다. 'd'는 key가 매핑되지 않은 경우 디폴트 값 (0)을 갖는 사전과 같은 defaultdict 객체입니다. 그래서'd'는 길이가 다른 각 부분 문자열의 발생 횟수를 계산합니다 5. – Ante