我正在为我的CSC类简介做一个python项目。我们得到一个.txt文件,基本上是200,000行单个单词。我们必须逐行读取文件,并计算字母表中每个字母显示为单词的第一个字母的次数。我把计数弄清楚并存储在一个列表中。但现在我需要以
格式打印它"a:10,898 b:9,950 c:17,045 d:10,596 e:8,735
f:11,257 .... "
另一个方面是它必须打印每行5个字母数,就像我上面所做的那样。
到目前为止,这就是我的工作......
def main():
file_name = open('dictionary.txt', 'r').readlines()
counter = 0
totals = [0]*26
alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
for i in file_name:
for n in range(0,26):
if i.startswith(alphabet[n]):
totals[n] = totals[n]+1
print(totals)
main()
此代码目前输出
[10898, 9950, 17045, 10675, 7421, 7138, 5998, 6619, 6619, 7128, 1505, 1948, 5393, 10264, 4688, 6079, 15418, 890, 10790, 20542, 9463, 5615, 2924, 3911, 142, 658]
答案 0 :(得分:1)
我高度建议使用dictionary来存储计数。它将大大简化您的代码,并使其更多更快。因为这显然是家庭作业所以我会把它留作练习。 (其他提示:Counter
甚至更好)。此外,现在您的代码仅适用于小写字母,而不是大写字母。您需要添加其他逻辑来将大写字母视为小写字母,或者单独处理它们。现在你只是忽略它们。
话虽如此,以下内容将以您当前的格式完成:
print(', '.join('{}:{}'.format(letter, count) for letter, count in zip(alphabet, total)))
zip
获取 n 列表,并使用 n 元素生成新的元组列表,每个元素来自其中一个输入列表。 join
使用提供的分隔符将字符串列表连接在一起。 format
使用格式说明符进行字符串插值以使用提供的值填充字符串中的值。
答案 1 :(得分:0)
python 3.4
解决方案是在循环中将文件行读入下面的单词变量并使用Counter
from collections import Counter
import string
words = 'this is a test of functionality'
result = Counter(map(lambda x: x[0], words.split(' ')))
words = 'and this is also very cool'
result = result + Counter(map(lambda x: x[0], words.split(' ')))
counters = ['{letter}:{value}'.format(letter=x, value=result.get(x, 0)) for x in string.ascii_lowercase]
如果您打印计数器:
['a:3','b:0','c:1','d:0','e:0','f:1','g:0','h:0 ','i:2','j:0','k:0','l:0','m:0','n:0','o:1','p:0', 'q:0','r:0','s:0','t:3','u:0','v:1','w:0','x:0','y :0','z:0']