我需要知道如何计算列表中以字母A,B,C..Z开头的单词的数量。
在这里,我离开了txt文件的阅读部分
#!/usr/bin/python
def main():
lines = []
xs = []
try:
with open("bin-nombres.txt", 'r') as fp:
lines = [lines.strip() for lines in fp]
for i in lines:
print(i[0])
xs = counterByLetter(i[0])
print(xs)
except EOFError as e:
print(e)
finally:
pass
def counterByLetter(data):
return [(k, v) for k, v in {v: data.count(v) for v in 'abcdefghijklmnopqrstuvwxyz'}.items()]
if __name__ == "__main__":
main()
我必须计算以[A ... Z]开头的单词数。例如。
在这里,我将解决问题的方法保留下来。感谢那些帮助我的人!
import string
def main():
try:
# this initiates the counter with 0 for each letter
letter_count = {letter: 0 for letter in list(string.ascii_lowercase)}
with open("bin-nombres.txt", 'r') as fp:
for line in fp:
line = line.strip()
initial = line[0].lower()
letter_count[initial] += 1 # and here I increment per word
#iterating over the dictionary to get the key and the value.
#In the iteration process the values will be added to know the amount of words.
size = 0
for key , value in letter_count.items():
size += value
print("Names that start with the letter '{}' have {} numbers.".format(key , value))
print("Total names in the file: {}".format(size))
except EOFError as e:
print(e)
if __name__ == "__main__":
main()
答案 0 :(得分:1)
假设有一个列表名称list
,其中包含3个元素:
list = ["Geeks", "For", "Triks"]
并具有一个包含26个元素的数组。
array = ["0", "0", ......"0", "0"......"0","0"]
array[0]
表示以A
开头的单词数。
.....................
.....................
array[25]
代表以Z
开头的单词数。
然后,
如果list[n][0]
以A
开头,那么您需要将array[0]
加1。
如果array[5] = 7
,则意味着有7个单词以F
开头。
这是找到结果的直接逻辑。
答案 1 :(得分:1)
因此,根据更新后的答案(每行1个单词,已经按字母顺序排序),应该可以执行以下操作:
import string
def main():
try:
# this initiates our counter with 0 for each letter
letter_count = {letter: 0 for letter in list(string.ascii_lowercase)}
with open("words.txt", 'r') as fp:
for line in fp:
line = line.strip()
initial = line[0].lower()
letter_count[initial] += 1 # and here we increment per word
print(letter_count)
except EOFError as e:
print(e)
if __name__ == "__main__":
main()
更新:
您不只是想要现成的解决方案是一件好事,但是您的代码有一些问题,并且有些要点不是超级pythonic,这就是我建议如上所述的原因。如果您真的想使用您的解决方案,则需要修复counterByLetter
函数。它的问题是您实际上并没有将结果存储在任何地方,而是总是为每个单词返回一个新的结果数组。您可能有一个以'z'开头的单词作为文件的最后一个单词,因此结果以0
作为所有字母的计数,但'z'除外,其中所有字母都有一个。您需要在该函数中更新当前字母的值,而不是立即计算整个数组。
答案 2 :(得分:1)
我建议像这样更改您的代码。
使用设置为collection.defaultdict的int作为值:使用第一个字母作为dictionary的键,只要有匹配项,就可以增加其值。所以:
from collections import defaultdict
将xs
设置为xs = defaultdict(int)
将for i in lines:
正文更改为
for i in lines:
xs[i[0]] += 1
如果您在xs
循环的末尾打印for
,则会得到类似的内容:
defaultdict(<class 'int'>, {'P': 3, 'G': 2, 'R': 2})
dict中的键区分大小写,因此,如果需要,请注意转换大小写。
您不需要外部方法即可进行计数。