繁体   English   中英

查找列表中以某些字母开头的单词

[英]Find how many words start with certain letter in a list

我试图从单独的文本文件中输出列表中以字母'a'开头'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'.

等等。

你可以用替换此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重命名为列表的内容。

另外,您可以使用startswith(character)来代替第一个字符,而不用使用a_word[0]来检查第一个字符,该命令具有相同的效果并且可读性更高。

您在每次迭代中都使用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'.")

sum(generator)是一种可行的方法,但是出于完整性考虑,您可能希望通过列表理解来实现(也许可读性更高,或者您想要对等开头的单词进行处理)。

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'")

使用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)

暂无
暂无

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

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