计算字符串中字母字符的数量

时间:2019-03-27 19:43:51

标签: python

我需要让用户输入一个允许包含任何字符的字符串。输入后,我需要计算字符串中每个字母字符的出现。到目前为止,我有:

s = input("Enter a string: ")
s = s.upper()
all_freq = {}
for i in s:
    if i in all_freq:
        all_freq[i] += 1
    else:
        all_freq[i] = 1
print(all_freq)

这是错误的,因为它在计数中包含数字,空格和特殊字符。

4 个答案:

答案 0 :(得分:3)

使用列表推导进行过滤,对Counter(来自集合)进行计数将使其更加紧凑:

from collections import Counter
s = "Hello World!" 
result = Counter(c for c in s.upper() if c.isalpha())
print(result)
# Counter({'L': 3, 'O': 2, 'H': 1, 'E': 1, 'W': 1, 'R': 1, 'D': 1})

答案 1 :(得分:1)

如果只想计算字符,则可以使用isalpha函数来检查字符是否为字母。

s = input("Enter a string: ")
s = s.upper()
all_freq = {}
for i in s:
    if i.isalpha():
        if i in all_freq:
            all_freq[i] += 1
        else:
            all_freq[i] = 1
print(all_freq)
Enter a string: Hello World!
{'H': 1, 'E': 1, 'L': 3, 'O': 2, 'W': 1, 'R': 1, 'D': 1}

希望这会有所帮助!

答案 2 :(得分:1)

您还可以使用正则表达式来检查字符

import re
s = input("Enter a string: ")
s = s.upper()
all_freq = {}
for i in s:
   if bool(re.match('[A-Z]',i)):
       if i in all_freq :
          all_freq[i] += 1
       else:
          all_freq[i] = 1
print(all_freq)

以下是输出:

Enter a string: hello hello 1 $
{'H': 2, 'E': 2, 'L': 4, 'O': 2}

答案 3 :(得分:0)

也许一个简单的解决方案是像下面这样使用string模块:

import string

s = input("Enter a string: ")
ignore = string.whitespace + string.digits + string.punctuation
s = s.upper()
all_freq = {}

for c in s:
    if c not in ignore:
        all_freq[c] = all_freq.get(c, 0) + 1
print(all_freq)