繁体   English   中英

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

[英]Count number of capital letters in file 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)

使用集合解决

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()))

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

类似于@Eric 的回答,但使用map函数代替:

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

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

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

print(count)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM