Функция подсчета букв - PullRequest
       34

Функция подсчета букв

0 голосов
/ 19 октября 2018

Мне нужно определить функцию, которая принимает строку и подсчитывает количество букв алфавита (только нижний регистр) на входе, например, если я введу «jack», он вернет:

a=1,b=0,c=1,d=0,...,j=1,k=1,...,z=0.

Итак, я реализовал следующее:

def l_count(str):
    str.lower()
    for ch in str:
        return str.count('a')

, который возвращает только число «а» в строке.Поскольку я не хочу делать это для всего алфавита, я думал о реализации понимания списка следующим образом:

al = [chr(i) for i in range(ord('a'),ord('z'))] 
def l_count(str):
    str.lower()
    for character in str:
        return str.count(al)

Но я получаю ошибку:

must be str, not list 

Я нене знаю, как это изменить, так как я получаю ту же ошибку.

Ответы [ 4 ]

0 голосов
/ 19 октября 2018

Если вам нужны только те символы, которые присутствуют в строке, вы можете использовать объект Counter:

>>> from collections import Counter
>>> my_counter = Counter('jack')
>>> my_counter
Counter({'j': 1, 'a': 1, 'c': 1, 'k': 1})

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

>>> import string
>>> ','.join('{}={}'.format(ch, my_counter.get(ch, 0)) for ch in string.ascii_lowercase)
'a=1,b=0,c=1,d=0,e=0,f=0,g=0,h=0,i=0,j=1,k=1,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0'

>>> for ch in string.ascii_lowercase:
...     print(ch, my_counter.get(ch, 0))
a 1
b 0
c 1
d 0
e 0
f 0
g 0
h 0
i 0
j 1
k 1
l 0
m 0
n 0
o 0
p 0
q 0
r 0
s 0
t 0
u 0
v 0
w 0
x 0
y 0
z 0
0 голосов
/ 19 октября 2018

Я думаю, вам нужен этот:

import string
def l_count(stra):
    stra = stra.lower()
    return {i:stra.count(i) for i in string.ascii_lowercase}
0 голосов
/ 19 октября 2018

Вот один из способов использования collections.Counter:

from collections import Counter
from string import ascii_lowercase

x = 'jack'

c = Counter(dict.fromkeys(ascii_lowercase, 0))
c.update(Counter(x))

print(*(f'{k}={v}' for k, v in c.items()), sep=',')

a=1,b=0,c=1,d=0,e=0,f=0,g=0,h=0,i=0,j=1,k=1,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0

Возможно, вы захотите добавить логику к lowercase вашей строке, исключить пунктуацию и т. Д.

0 голосов
/ 19 октября 2018

Вы можете использовать объект Counter для этого

from collections import Counter
Counter(x for x in string.lower() if x.isalpha())

Это преобразует все символы в string в нижний регистр, проверяет, являются ли они алфавитными, а затем считает все символы.

...