2015-10-17 3 views
0

Я написал эту программу Python для подсчета числа каждого символа в строке Python.Как я могу подсчитать количество каждого символа в строке Python?

def count_chars(s): 
    counts = [0] * 65536 
    for c in s: 
     counts[ord(c)] += 1 
    return counts 

def print_counts(counts): 
    for i, n in enumerate(counts): 
     if n > 0: 
      print(chr(i), '-', n) 

if __name__ == '__main__': 
    print_counts(count_chars('hello, world \u2615')) 

Выход:

- 2 
, - 1 
d - 1 
e - 1 
h - 1 
l - 3 
o - 2 
r - 1 
w - 1 
☕ - 1 

Может ли эта программа заботиться о подсчете количества любых вхождений любого символа Unicode? Если нет, что можно сделать, чтобы обеспечить соблюдение всех возможных символов Юникода?

+0

Пробовали ли вы, чтобы увидеть, что происходит? – usr2564301

ответ

7

Ваш код обрабатывает только символы в Basic Multilingual Plane; Например, emoticons не обрабатывается. Вы можете исправить это, просто используя словарь вместо списка с фиксированным числом индексов и используя символы в качестве ключей.

Однако, вы должны просто использовать collections.Counter() object:

from collections import Counter 

counts = Counter(s) 

for character, count in counts.most_common(): 
    print(character, '-', count) 

Это, в конце концов, предназначен как раз для таких случаев использования.

Демо:

>>> from collections import Counter 
>>> s = 'hello, world \u2615 \U0001F60A' 
>>> counts = Counter(s) 
>>> for character, count in counts.most_common(): 
...  print(character, '-', count) 
... 
    - 3 
l - 3 
o - 2 
r - 1 
w - 1 
e - 1 
h - 1 
d - 1 
☕ - 1 
, - 1 
- 1 
Смежные вопросы