2015-02-04 2 views
1

Например, яКак хранить части строки в словарь

from collections import Counter 
cnt = Counter() 
    text = 'CTGGAT' 
    def freqWords(text, k): 
     for i in text: 
      cnt [i] += 1 
     print cnt 

Выходы: Счетчик ({ 'А': 10, 'C': 9, 'Т': 8, ' G ': 4})

Что возвращает хороший словарь, однако я хочу хранить свои предметы по значению k. Таким образом, если k = 2, то dict заполнит значениями: CT, TG, GG, GA, AT. Если k = 3, то: CTG, TGG, GGA, GAT.

ответ

0

Ваш for i in text выполняет итерации по символам text. Вы должны пройти по длине text минус k и взять подстроку text:

def freqWords(text, k): 
    return Counter(text[i:i+k] for i in xrange(len(text) - k)) 

работает так:

freqWords('CTGGAT', 2) 
# Counter({'GG': 1, 'TG': 1, 'GA': 1, 'CT': 1}) 
+1

Awesome, кратким и элегантный один лайнер. Теперь я просто не должен больше забывать о силе подстроки. – deedle

Смежные вопросы