2010-10-20 1 views
0

Как узнать, сколько раз строки s, т и п появляются в каждом из следующих слов, чтобы иметь выход так:Сколько раз разные буквы появляются в разных словах?

  • описаний: S 2, т 1, п 1
  • заявления s 2 , t 3, n 1

Слова не известны заранее. Сначала мне пришло в голову сделать словарь, но для словарей мы можем иметь только два неизвестных, поэтому любые подсказки, как подойти к нему ? Спасибо заранее.

+0

Какая версия Python вы используете? – kennytm

+1

Пожалуйста, отметьте домашнее задание тегом [домашняя работа]. –

+0

Python version 2.6.5 – Adia

ответ

1
from collections import defaultdict 
def counter(STRING): 
    h=defaultdict(int) 
    for i in STRING: 
    if i in "stn": 
     h[i]+=1 
    return h 
for s in ['description','statements']: 
    k=counter(s) 
    print k + " for " + s 
+0

Но как указать, относятся ли, например, числа s 2, t 1, n 1 к «описаниям» или «операторам»? – Adia

+0

смотрите. вы могли бы придумать это сами. – ghostdog74

+0

Спасибо. Печать должна выглядеть так: print k, "for", s, иначе выдаст ошибку: неподдерживаемый тип операндов для +: – Adia

0

Наивная реализация:

d = {} 
for c in s: 
    d[c] = s.count(c) 
+0

Это слишком часто вызывает '.count'. Вы имеете в виду 'd [c] + = 1'? – kennytm

+0

@KennyTM: Это было бы частью не наивного решения. –

+0

Я думаю, 'для c в наборах и наборах (" stn "):' также будет не наивным. – intuited

2

В Python ≥2.7 и ≥3.1 you could use collections.Counter.

>>> from collections import Counter 
>>> Counter("descriptions") 
Counter({'i': 2, 's': 2, 'c': 1, 'e': 1, 'd': 1, 'o': 1, 'n': 1, 'p': 1, 'r': 1, 't': 1}) 

(Для Python ≥2.5 есть реализация в http://code.activestate.com/recipes/576611/.)

Класс Счетчик имеет обычный интерфейс словаря, так что вы можете использовать x['n'], чтобы получить количество.

>>> print("%s %s, %s %s, %s %s" % ('s', _['s'], 't', _['t'], 'n', _['n'])) 
s 2, t 1, n 1 
Смежные вопросы