Python 查找列表中以某个字母开头的单词数

Python 查找列表中以某个字母开头的单词数,python,list,python-3.x,Python,List,Python 3.x,我试图从一个单独的文本文件中输出列表中以字母'a'开头的单词总数。我正在寻找这样的输出 35 words start with a letter 'a'. 但是,我输出的是以'a'开头的所有单词,而不是当前代码的总数。我应该使用for循环以外的其他东西吗 到目前为止,我一直在尝试: wordsFile = open("words.txt", 'r') words = wordsFile.read() wordsFile.close() wordList = words.split() pri

我试图从一个单独的文本文件中输出列表中以字母
'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
调用来替换它,在该调用中,您为
wordList
中以
a
开头的每个单词提供
1

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"')
使用当前的方法,您不需要求和,只需打印匹配的任何单词。此外,当您迭代列表时,您正在将
一个单词
int
命名为列表的内容


此外,您可以使用
startswith(character),而不是使用
a_word[0]
检查第一个字符
具有相同的效果,并且可读性更强。

您可以用
sum
调用来代替它,在该调用中,您为
wordList
中以
a
开头的每个单词输入
1

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"')
使用当前的方法,您不需要求和,只需打印匹配的任何单词。此外,当您迭代列表时,您正在将
一个单词
int
命名为列表的内容


此外,您可以使用具有相同效果且可读性更强的
startswith(character)
来代替使用
a_words[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'.")

您正在使用
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)
是一种方法,但为了完整性起见,您可能希望通过列表理解来完成它(如果它可读性稍高,或者您希望使用以a开头的单词等)

之后,您可以使用内置的
len
检索新列表的长度

print(len(words_starting_with_a), "words start with a letter 'a'")
sum(generator)
是一种方法,但为了完整性起见,您可能希望通过列表理解来完成它(如果它可读性稍高,或者您希望使用以a开头的单词等)

之后,您可以使用内置的
len
检索新列表的长度

print(len(words_starting_with_a), "words start with a letter 'a'")

使用
re.findall
函数的简单替代解决方案(无需拆分文本和
for
循环):


使用
re.findall
函数的简单替代解决方案(无需拆分文本和
for
循环):


但是,我会输出所有以“a”开头的单词,这是因为在
for
循环中,有一个
print
语句。如果你不想打印文字,那么。。。不要。但是,我正在输出所有以“a”开头的单词,这是因为在
for
循环中,有一个
print
语句。如果你不想打印文字,那么。。。这正是这样做的:将以字母“a”开头的单词的出现次数相加。你还想要什么?没有什么比这个简单的线性解更有效的了。事实上,任何其他方法都会引入额外的开销(当然不足以影响性能,但仍然是不必要的)。此外,与Jim的单线解决方案相比,我更喜欢这个解决方案,因为您似乎需要更好地理解基本循环和一般软件开发问题的解决。这在一行上输出了总数。如果将
print
语句从for循环中取出,则它只会在循环执行完成后打印总数。这正是这样做的:将以字母“a”开头的单词的出现次数相加。你还想要什么?没有什么比这个简单的线性解更有效的了。事实上,任何其他方法都会引入额外的开销(当然不足以影响性能,但仍然是不必要的)。此外,与Jim的单线解决方案相比,我更喜欢这个解决方案,因为您似乎需要更好地理解基本循环和一般软件开发问题的解决。这在一行上输出了总数。如果将
print
语句从for循环中取出,那么它只会在循环执行完成后打印总数。尽管如此,它隐藏了OP真正需要更好理解的基本细节。@JSF确实如此,但这不仅仅是OP,这是关于任何人谁可能会碰到这个。我对他的错误给出了一般性的解决方案和一个小小的解释;如果OP需要基础知识,他应该去
docs.python.org
而不是StackOverfo