zoukankan      html  css  js  c++  java
  • 每天一个小程序—0004题(统计单词出现次数)

    第 0004 题: 任一个英文的纯文本文件,统计其中的单词出现的个数。

    先给出我一开始写得,只能说非常不优美,一个一个字符搞得。。。

     1 f = open('num.txt')
     2 word = []
     3 word_num = {}
     4 char = f.read(1)
     5 while char:
     6     if char == ' ' or char == '
    ':
     7         if word:
     8             word = ''.join(word).lower()  #转成小写
     9             if word in word_num:
    10                 word_num[word] += 1
    11             else:
    12                 word_num[word] = 1
    13             word = []
    14     else:
    15         word.append(char)
    16     char = f.read(1)
    17 if word:
    18     word = ''.join(word).lower()
    19     if word in word_num:
    20         word_num[word] += 1
    21     else:
    22         word_num[word] = 1
    23     word = []
    24 for i,j in word_num.items():
    25     print(i,j)

    第二次看了网上的,开始尝试用正则表达式来搞:

     1 import re
     2 
     3 f = open('num.txt')
     4 word_list = []
     5 reg = 'w+'   #/w是匹配字母、数字、下划线
     6 
     7 for line in f:
     8     word = re.findall(reg, line)    #也可以是word = line.split() 
     9     word_list.extend(word)
    10 
    11 word_set = set(word_list)
    12 word_dict = {word: word_list.count(word) for word in word_set}
    13 for i, j in word_dict.items():
    14     print(i, j)

    最后就是python自带的collections模块,里面有Counter计数器函数,可以自动统计单词出现次数。

    可以先用个例子来了解一下Counter:

    1 from collections import Counter
    2 
    3 word_list = ['I', 'am', 'zyb', 'zyb']
    4 ans = Counter(word_list)
    5 print(ans)

    结果为:

    代码很简洁,如下:

     1 import re
     2 from collections import Counter
     3 
     4 f = open('num.txt')
     5 word_list = []
     6 
     7 for line in f:
     8     word = line.split()
     9     word_list.extend(word)
    10 
    11 word_dict = dict(Counter(word_list))
    12 for i, j in word_dict.items():
    13     print(i, j)
  • 相关阅读:
    JAVA实现AES的加密和解密算法
    工厂方法模式(Factory Method)
    Java开发23种设计模式
    读取Maven项目下resources目录下的配置文件(properties为例)
    迭代解析JSON简单实例
    Tomcat8.0配置JNDI多数据源
    SpringMVC DispatcherServlet-------视图渲染过程
    【C/C++】求解线性方程组的雅克比迭代与高斯赛德尔迭代
    【C/C++】实现牛顿迭代
    【C/C++】查找(一):静态查找表
  • 原文地址:https://www.cnblogs.com/zyb993963526/p/8280755.html
Copyright © 2011-2022 走看看