计算一个字符串中字母的多少个字符

时间:2019-06-21 01:45:03

标签: python string counter

我想计算一个字符串中有多少个字母[a ... z],我不在乎“!”。要么 ”?”或“ \ n”,“,”,“”。还有很多其他我只想要字母。

我正尝试使用collections.Counter(string),但问题是Counter正在获取这些不需要的字符,而且我不知道如何辨别它们。

另一个问题是,在我真正的成语中,我们不仅使用“ o”,还使用“ô”和“ó”以及“ e”,“é”或“ç”。在这些情况下,必须考虑这些字符。

我该怎么做?

4 个答案:

答案 0 :(得分:1)

使用collections.Counter后删除非字母。

import collections
import string

counter = collections.Counter(yourString)
for char in counter.keys():
    if not isalpha(char):
        del counter[char]

这将分别对抗大写和小写字母以及具有不同重音符号和变音符号的字母。如果要忽略大小写,可以使用collections.Counter(yourString.lower())。如果您还想忽略变音符号,请使用collections.Counter(yourString.encode('ascii', 'ignore').decode().lower())

答案 1 :(得分:1)

如果只想计算唯一字符,则可以在字符串中的字符集和可接受的字符集之间使用set.intersection:

也许是这样的:

import string

acceptable_chars = set('áàéíóúç').union(set(string.ascii_lowercase))
mystring = 'kfh;l1234sóúçids'
num_alpha = len(set(mystring.lower()).intersection(acceptable_chars))
print(num_alpha)

输出:

10

答案 2 :(得分:0)

给出

import string
import collections as ct


s = "Lorem ipsum çéó?"

代码

制作一组accepted个字符-排除不需要的字符;包括你想要的东西。

excluded = set("oe")
included = set("ôóéç")
accepted = set(string.ascii_letters) - excluded | included 

计算并屏蔽可接受的字符。

counted = ct.Counter(s)
masked = ct.Counter(accepted)
shared = set((counted & masked).elements())

从Counter过滤接受的字符。

演示

字符总数

sum(v for k, v in counted.items() if k in shared)
# 11

唯一字符的总和

sum(1 for k, _ in counted.items() if k in shared)
# 10

相符字符字典

{k: v for k, v in counted.items() if k in shared}
# {'L': 1, 'r': 1, 'm': 2, 'i': 1, 'p': 1, 's': 1, 'u': 1, 'ç': 1, 'é': 1, 'ó': 1}

答案 3 :(得分:0)

所以,伙计们!

我将Reblochon Masque答案标记为正确,因为我认为是正确的。但是经过更多测试后,我发现我错了。因此,我根据他的代码制定了自己的解决方案。

该代码的问题是,如果我的字符串是“ kfh;l1234sóúçids”(如他的示例),则输出正确,为10。但是,如果我用空格重复它,例如:“ kfh;l1234sóúçidskfh;l1234sóúçids”,我得到10再次,应该是20。

因此,我的解决方案是创建一组可接受的字符(如他的代码)并将其用作参考。

这里:(在我的情况下,输出为11,因为我在集合中添加了一些特殊的字符。

import collections
import string

# This counter is considering only acceptable_chars. All the rest is ignored.
def numChars(sentence):
    acceptable_chars = set('áàéíóúç').union(set(string.ascii_lowercase))
    chars = collections.Counter(sentence)
    acum = 0

    for key in acceptable_chars:
        if key in chars:
            acum += chars[key]

    return acum


x = numChars("kfh;l1234sóúçids")
print("Acum: " + str(x))

输出:

Acum: 11

如果字符串是'kfh;l1234sóúçids\ n kfh;l1234sóúçids':

Acum: 22