scs653298 发表于 2018-8-6 12:36:03

python统计前十出现最多的词

  一、描述
  这是一道python面试题:
  “一个可读文件,有一万行,一行只有一个单词,单词可以重复的,求出这一万行中出现频繁次数最多的前10个单词”
  二、思路
  先读取文件变为列表,再用集合去重得到一个参照的列表,逆排序取前10(最大即最多的的10个元素),再用参照列表中的每个元素从文件中去统计,把参照列表中的元素作为键,统计到的结果为值,放入字典,打印出来。
  三、代码
#!/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 = all_C.count(key)
  
#获取前10个元素的个数变为列表
  
tens = sorted(counts.values(),reverse=True)
  
print tens
  
#统计最终前十的元素及出现次数
  
tendict = {}
  
for k in counts.keys():
  
    if counts in tens:
  
      tendict.setdefault(counts,k.strip("\n"))
  
print("出现最多的10个词为:%s \n") %tendict
  #python tens.py
  如图:

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

  参考其他人代码二:
#!/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 += 1
  
      else:
  
            result = 1
  
print(sorted(result.items(),key=lambda k:k,reverse=True)[:11])
  执行结果如图:

  总结:
  自己写的有点lower完全是练习,方法二高大上!还有更好的方法吗?
页: [1]
查看完整版本: python统计前十出现最多的词