1.贴题
题目来自MOOC
《用Python玩转数据》(南京大学)
第四周编程作业
对于一个已分词的句子(可方便地扩展到统计文件中的词频):
我/是/一个/测试/句子/,/大家/赶快/来/统计/我/吧/,/大家/赶快/来/统计/我/吧/,/大家/赶快/来/统计/我/吧/,/重要/事情/说/三遍/!
可以用collections模块中的Counter()函数方便地统计词频,例如可用如下代码:
import collections
s = "我/是/一个/测试/句子/,/大家/赶快/来/统计/我/吧/,/大家/赶快/来/统计/我/吧/,/大家/赶快/来/统计/我/吧/,/重要/事情/说/三遍/!/"
s_list = s.split('/')
[s_list.remove(item) for item in s_list if item in ',。!”“']
collections.Counter(s_list)
这个问题也可以通过字典来解决,请编写用字典解决本问题的程序,为便于OJ系统自动判断,程序最后输出字符串中包含的不同词的个数。
程序参考框架
def countfeq(s):
... ...
return a dict
if __name__ == "__main__":
s = input()
... ...
s_dict = countfeq(s)
print(len(s_dict.keys()))
输入格式:
字符串
输出格式:
整数
输入样例(因为oj系统限制,测试用例设为判断英文单词个数,请注意英文标点,假设仅包含,和.):
Spring/is/coming/./Spring/is/coming/.
输出样例:
3
时间限制:500ms内存限制:32000kb
2.说明
思路很简单,就是建立一个字典,key为单词,value为个数,数个数使用collections里面的Counter函数。
3.参考代码
话不多说,贴代码。
import collections #导入库
def countfeq(s): #词频统计函数
s_list = s.split('/') #以"/"为分界将字符串变成列表
[s_list.remove(item) for item in s_list if item in ',.'] #将',.'去除
dic = collections.Counter(s_list) #利用Counter函数统计个数
return dic #返回字典
if __name__ == "__main__":
s = input() #输入字符串
s_dict = countfeq(s) #执行函数
print(len(s_dict.keys())) #打印字典key的长度(个数),即为不同单词的个数
4.后记
虽然这道题不难,根据给出的框架能够很容易地解答出来,但是学到了
- 一个函数,collections.Counter(list)可以生成字典,key为list里的字符或单词,value为个数
- list.remove(item)把list里面的某个字符或单词去除,也可以嵌套循环和条件语句
- 写代码的时候疑问过collections.Counter(s_list)有没有范围值,返回的是什么,经过查询发现是字典