关于python:仅计算字符串中字母的频率

Counting only the frequency of letters in a string

我正试图让我的程序把除了数字以外的所有东西都计算成一个字符串,然后把它存储在字典中。

到目前为止,我有:

1
2
3
4
5
6
7
8
9
10
11
string = str(input("Enter a string:"))
stringUpper = string.upper()

dict = {}
for n in stringUpper:
    keys = dict.keys()
    if n in keys:
        dict[n] += 1
    else:
        dict[n] = 1
print(dict)

我只想量化字母数字,但我不知道如何排除非字母字符。


基本上涉及多个步骤:

  • 去掉那些你不想数的字符
  • 清点剩余的

您有几个选项可以执行这些操作。我只提出一个选择,但请记住,可能还有其他(更好)的选择。

1
2
3
4
from collections import Counter

the_input = input('Enter something')
Counter(char for char in the_input.upper() if char.isalpha())

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Enter something: aashkfze3f8237rhbjasdkvjuhb

Counter({'A': 3,
         'B': 2,
         'D': 1,
         'E': 1,
         'F': 2,
         'H': 3,
         'J': 2,
         'K': 2,
         'R': 1,
         'S': 2,
         'U': 1,
         'V': 1,
         'Z': 1})

所以它显然起作用了。在这里,我使用collections.Counter进行计数,使用str.isalpha作为条件的生成器表达式来除去不需要的字符。

请注意,代码中有几个坏习惯会使您的生活比需要的更复杂:

  • dict = {}将隐藏内置的dict。所以最好换个名字。
  • string是一个内置模块的名称,因此这里的不同名称可能更好(但不是str也是一个内置名称)。
  • stringUpper = string.upper()。在python中,通常不使用camelcase,而是使用_来分隔单词(即string_upper),但是由于您只使用它来循环,所以也可以直接使用for n in string.upper():
  • n这样的变量名并不是很有用。通常,当对字符串进行迭代时,可以将它们命名为charcharacter,或者当对"一般"的iterable进行迭代时,可以将它们命名为item

在进行任何操作之前,可以使用re替换所有非字母字符:

1
2
3
regex = re.compile('[^a-zA-Z]')
#First parameter is the replacement, second parameter is your input string
regex.sub('', stringUpper )


1
2
3
4
5
6
for n in stringUpper:
    if n.isalpha()
        dict[n] += 1
    else:
        dict[n] = 1
print(dict)


string=str(输入("输入字符串:")

1
2
3
4
5
6
7
8
9
10
11
stringUpper = string.upper()

dict = {}
for n in stringUpper:
    if n not in '0123456789':
        keys = dict.keys()
        if n in keys:
            dict[n] += 1
        else:
            dict[n] = 1
print(dict)


您可以检查字符串的字母数字

1
n.isalnum()

对于失语症患者:

1
n.isalpha()

所以你的代码应该是:

1
2
3
4
5
6
7
8
9
10
11
dict = {}
for n in stringUpper:
    if n.isalpha():
        keys = dict.keys()
        if n in keys:
            dict[n] += 1
        else:
            dict[n] = 1
        print(dict)
     else:
        #do something....