2013-12-05 2 views
1

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

from collections import Counter 
str = "Mary had a little lamb" 
counter = Counter(str) 
print counter['a'] 
print counter['b'] 
print counter['c'] 
print counter['d'] 
print counter['e'] 
print counter['f'] 
#etc to z 

Есть более простой способ сделать это ????

+1

Код, который вы упомянули, на самом деле проще, чем то, что вы получили бы на большинстве других языков (благодаря полезному модулю 'collections'). Если вам не интересно, как писать цикл 'for' ... это так? – goncalopp

+0

Взгляните на [этот ответ] (http://stackoverflow.com/a/538374/1454048). Вам нужно будет написать код счета самостоятельно, но это поможет вам начать. – admdrew

+0

Не уверен, какой аспект вы считаете уродливым. Операция подсчета - всего две строки (импортируйте класс Counter, затем создайте экземпляр Creater). Является ли это последовательностью утверждений 'print', которые вы считаете уродливыми? Разумеется, существует миллион различных способов использования/представления информации после ее получения. – jez

ответ

0
import string 
from collections import Counter 
str = "Mary had a little lamb" 
counter = Counter(str) 
for letter in string.lowercase: 
    print counter[letter] 
1

Вам просто нужно перебрать все строчные буквы и распечатать подсчеты для каждого:

>>> from collections import Counter 
>>> sentence = "Mary had a little lamb" 
>>> counter = Counter(sentence) 
>>> from string import ascii_lowercase 
>>> for letter in ascii_lowercase: 
...  print '{} = {}'.format(letter, counter[letter]) 
a = 4 
b = 1 
c = 0 
d = 1 
e = 1 
f = 0 
g = 0 
h = 1 
i = 1 
j = 0 
k = 0 
l = 3 
m = 1 
n = 0 
o = 0 
p = 0 
q = 0 
r = 1 
s = 0 
t = 2 
u = 0 
v = 0 
w = 0 
x = 0 
y = 1 
z = 0 
2

Предполагая, что я вас понимаю:

>>> from collections import Counter 
>>> from string import ascii_lowercase 
>>> s = "Mary had a little lamb" 
>>> counts = Counter(s.lower()) 
>>> for letter in ascii_lowercase: 
...  print letter, counts[letter] 
...  
a 4 
b 1 
c 0 
[...] 
x 0 
y 1 
z 0 

Обратите внимание, что я строчное строка так, чтобы m дал бы 2; если вы этого не хотите, удалите .lower() и вместо этого используйте string.ascii_letters.

+1

+1 для обучения меня, что 'counts [" несуществующий ключ "]' возвращает '0'. Раньше я этого не знал и ожидал бы «KeyError». –

+0

@TimPietzcker: да, хотя 'Counter' не является подклассом' defaultdict', он ведет себя как один в этом отношении. – DSM

1

Если вы хотите, чтобы напечатать информацию о персонажах, которые на самом деле в строке, простой способ будет делать

for key in sorted(counter.keys()): 
    print("{0} appears {1} times.".format(key, counter[key])) 

Результат:

appears 4 times. 
M appears 1 times. 
a appears 4 times. 
b appears 1 times. 
d appears 1 times. 
e appears 1 times. 
h appears 1 times. 
i appears 1 times. 
l appears 3 times. 
m appears 1 times. 
r appears 1 times. 
t appears 2 times. 
y appears 1 times. 

Обратите внимание, что символ пробела является тоже подсчитали.

1
from collections import Counter 
str = "Mary had a little lamb" 
counter = Counter(str) 
for c in set(str): 
    print '%s -> %d' % (c, counter[c]) 
+0

Вы используете пробелы вместо обратных ссылок для кодирования блоков. – admdrew

+0

спасибо за исправление моей разметки :) – sphere

0

См this answer, это даст вам пример того, как создать диапазон символов. Затем просто используйте цикл foreach:

for item in letters_a_to_z: 
    print counter[item] 
Смежные вопросы