python统计前十出现最多的词

一、描述

     这是一道python面试题:

     “一个可读文件,有一万行,一行只有一个单词,单词可以重复的,求出这一万行中出现频繁次数最多的前10个单词


二、思路

       先读取文件变为列表,再用集合去重得到一个参照的列表,逆排序取前10(最大即最多的的10个元素),再用参照列表中的每个元素从文件中去统计,把参照列表中的元素作为键,统计到的结果为值,放入字典,打印出来。


三、代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/python
#coding:utf-8
all_C  =  []
with  open ( "words.txt" , 'r' ) as f:
     for  line  in  f.readlines():
         all_C.append(line)
#获取无重复元素
all_set = set ( sorted (all_C))
#统计为字典
counts = {}
for  key  in  all_set:
      counts[key]  =  all_C.count(key)
#获取前10个元素的个数变为列表
tens  =  sorted (counts.values(),reverse = True )[ 0 : 11 ]
print  tens
#统计最终前十的元素及出现次数
tendict  =  {}
for  in  counts.keys():
     if  counts[k]  in  tens:
         tendict.setdefault(counts[k],k.strip( "\n" ))
print ( "出现最多的10个词为:%s \n" % tendict


#python tens.py

如图:

wKioL1nN5o_xRcELAAGkpo338gw245.png

练习的文件类似 如下10001行,以文件的方式读取还是很快的:

wKioL1nN50vCAnEpAAMEGH1zANI990.png


参考其他人代码二:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/python
#coding:utf-8
result =  {}
with  open ( "words.txt" , 'r' ) as fopen:
     fopen.seek( 0 , 2 )
     all  =  fopen.tell()
     fopen.seek( 0 , 0 )
     while  fopen.tell() <  all :
         lines  =  fopen.readline().strip()
         if  lines  in  result:
             result[lines]  + =  1
         else :
             result[lines]  =  1
print ( sorted (result.items(),key = lambda  k:k[ 1 ],reverse = True )[: 11 ])

执行结果如图:

wKioL1nbUTCTID2hAAFlGKj6FLM140.png

总结:

        自己写的有点lower完全是练习,方法二高大上!还有更好的方法吗?










本文转自 dyc2005 51CTO博客,原文链接:http://blog.51cto.com/dyc2005/1969699,如需转载请自行联系原作者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值