我正在尝试从单独的文本文件中输出列表中以字母'a'
开头的单词总数。我正在寻找这样的输出。
35 words start with a letter 'a'.
但是,我输出所有以'a'
开头的单词而不是当前代码的总数。我应该使用for循环以外的东西吗?
到目前为止,这是我的尝试:
wordsFile = open("words.txt", 'r')
words = wordsFile.read()
wordsFile.close()
wordList = words.split()
print("Words:",len(wordList)) # prints number of words in the file.
a_words = 0
for a_words in wordList:
if a_words[0]=='a':
print(a_words, "start with the letter 'a'.")
到目前为止我得到的输出:
Words: 334
abate start with the letter 'a'.
aberrant start with the letter 'a'.
abeyance start with the letter 'a'.
等等。
答案 0 :(得分:3)
您可以将sum
来电替换为1
,以wordList
开头a
中的每个字:
print(sum(1 for w in wordList if w.startswith('a')), 'start with the letter "a"')
如果您使用startswith
返回的布尔值,则可以进一步减少此值,因为True
在这些上下文中被视为1
,效果是相同的:
print(sum(w.startswith('a') for w in a), 'start with the letter "a"')
使用您当前的方法,您不是在总结任何东西,而只是打印任何匹配的单词。此外,您在迭代时将a_word
从int
重新命名为列表内容。
此外,您可以使用具有相同效果且更具可读性的a_word[0]
,而不是使用startswith(character)
来检查第一个字符。
答案 1 :(得分:2)
您在每次迭代中使用a_words
作为单词的值并且缺少计数器。如果我们将for循环更改为words
作为值并为计数器保留a_words
,我们可以在每次传递条件时递增计数器。您可以将a_words
更改为wordCount
或其他通用内容,以使其更便于携带且对其他字母更友好。
a_words = 0
for words in wordList:
if words[0]=='a':
a_words += 1
print(a_words, "start with the letter 'a'.")
答案 2 :(得分:1)
sum(generator)
是一种方法,但为了完整起见,你可能想要用列表理解来做(也许如果它稍微更具可读性,或者你想要用以<开头的单词做某事) em> a 等。)。
words_starting_with_a = [word for word in word_list if word.startswith('a')]
之后,您可以使用内置的len
来检索新列表的长度。
print(len(words_starting_with_a), "words start with a letter 'a'")
答案 3 :(得分:0)
使用re.findall
函数的简单替代解决方案(不拆分文本和for
循环):
import re
...
words = wordsFile.read()
...
total = len(re.findall(r'\ba\w+?\b', words))
print('Total number of words that start with a letter "a" : ', total)