计算文件中的大写字母数量 Python?



我正在尝试计算包含文本数据的文本文件中唯一大写字母的数量。我已经完成了从文件中计算大写字母,但需要您帮助计算唯一的大写字母。

这是我尝试过的:

with open('demo.txt') as countletter:
    count = 0
    text = countletter.read()
    for character in text:
        if character.isupper():
            count += 1
print(count) 

您需要跟踪已经出现的大写字母。使用 set 是一个可行的解决方案。

letters = set()
with open('demo.txt') as countletter:
    count = 0
    text = countletter.read()
    for character in text:
        if character.isupper():
            count += 1
            letters.add(character)
print(count)

非常紧凑的解决方案:

with open('demo.txt') as countletter:
    count = sum(character.isupper() for character in set(countletter.read()))
    print(count)

使用 set 的解决方案

unique_capital_letters = set()
with open('demo.txt') as countletter:
    text = countletter.read()
    for character in text:
        if character.isupper():
            unique_capital_letters.add(character)
number_of_unique_occurrences = len(unique_capital_letters)
print(number_of_unique_occurrences)

将所有字符添加到列表中。然后从中创建一个集合并取其长度。这将为您提供独特的大写字符。如下所示:

with open('demo.txt') as countletter:
    char_list = list()
    count = 0
    text = countletter.read()
    for character in text:
        if character.isupper():
            #append the capitals
            char_list.append(character)
#create a set and get its length
print(len(set(char_list))) 

您还需要记录所有已经出现的大写字母。

类似的东西

CapitalChar=''
with open('demo.txt') as countletter:
    count = 0
    text = countletter.read()
    for character in text:
        if character.isupper() and not in CapitalChar:
            CapitalChar=CapitalChar + character
            count += 1
print(count) 

其他答案很好,只是想指出您可以使用Counter让生活更轻松:

from collections import Counter
with open('demo.txt') as countletter:
    unique = Counter(countletter.read())
    unique_capital_letters = {char: count for char, count in unique.items() if char.isupper()}

这里已经发布了一些完美的答案,但为了方便起见,这里有一种非常紧凑的方法,只需使用常规python即可实现它:

with open('demo.txt') as countletter:
  count = sum(character.isupper() for character in set(countletter.read()))

集合保证每个元素都是唯一的,并且像我所做的广告一样使用总和,每次字符为大写时都会计数

类似于@Eric的答案,但改用map函数:

with open('demo.txt') as countletter:
    count = sum(map(str.isupper, set(countletter.read())))

有很多方法可以实现您的目标。人们肯定会根据代码的逻辑为您提供一种方法。在这里,我为您提供了一种通过使用列表推导合成器来实现目标的新方法。

with open('demo.txt') as f:
   text = f.read()
   count = len(set([character for character in text if character.isupper()]))
print(count)

最新更新