python复合数据类型以及英文词频统计
这个作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2753。
1.列表,元组,字典,集合分别如何增删改查及遍历。
列表操作如下所示:
#列表 string = 'list' #字符串->列表 list1 = list(string) # ['l', 'i', 's', 't'] #列表->字符串 string1 = ''.join(list1) #list #列表的增删改查 list1 = list('this is a list') #增加 list1.append('!') #末尾增加元素 list1.insert(2,'this is index 3') #指定index增加一个元素 #删除 list1.pop(-1) #删除指定index的元素 默认是-1 return被删除元素的值 del list1[-1] if '!' in list1: #删除第一个匹配的元素,如果不存在会报错,没有返回值 list1.remove('!') #修改 list1[0] = '0' #元素赋值 list1[0:2] = list('05') #分片赋值 list1[1:1] = list('1234') #分片赋值 插入新元素 list1[1:5] = [] #分片赋值 删除元素 #查找 if 'a' in list1: index = list1.index('a') # 查找元素下标 #拼接 list2 = ['new','list'] list1.extend(list2) #从列表增加元素 print list1 #逆置 list1.reverse(); print list1 #去重 #1 l1 = ['b','c','d','c','a','a'] l2 = list(set(l1)) #2 l2.sort(key=l1.index) #保持原来的顺序 #3 l1 = ['b','c','d','c','a','a'] l2 = [] for i in l1: #[l2.append(i) for i in l1 if not i in l2] if not i in l2: l2.append(i) print l2 #保持原来的顺序
集合操作如下所示:
1 # 两种方法创建 2 set1 = set('kydaa') 3 set2 = {'abc', 'jaja', 'abc', 'kyda'} 4 print(set1) 5 print(set2) 6 # 结果:自动将重复元素去除 7 {'a', 'y', 'd', 'k'} 8 {'jaja', 'abc', 'kyda'}
字典操作如下所示:
1 #字典 2 #创建 3 dict1 = { 4 'key':'value', 5 'key1':'value1' 6 } 7 a = [('key1','value1'),('key2','value2')] 8 dict1 = dict(a) 9 dict1 = {}.fromkeys(['key1','key2'],'default_value') #从键值创建dict 10 dict1 = dict(key1='value1',key2='value2') 11 #增加 12 dict1['key3']='value3' #字典可以自动添加 13 dict1.setdefault('key5','N/A') #如果不存在,就设置默认值 14 #删除 15 del dict1['key3'] 16 print dict1.pop('key2') #popitem随机删除 和列表的pop一样 17 #dict1.clear() #深删除,即使有拷贝 也会被删除 18 #修改 19 if 'key1' in dict1: 20 dict1['key1']='new_value_1' 21 #查找 22 if 'key1' in dict1: 23 print dict1['key1'] 24 if dict1.has_key('key1'): 25 print dict1['key1'] 26 print dict1.get('key3','not exists') #宽松访问 27 print dict1.keys(),dict1.values() 28 #拼接 29 dict2 = dict(key4 = 'value4') #从字典更新另一个字典 30 dict1.update(dict2)
2.总结列表,元组,字典,集合的联系与区别。
(1)list是处理一组有序项目的数据结构,即可以在一个列表中存储一个序列的项目。列表中的项目应该包括在方括号中。一旦创建了一个列表,就可以添加,删除,或者是搜索列表中的项目。列表是可变的数据类型,并且列表是可以嵌套的。python里的列表用“[]”表示。列表的特点是可重复,类型可不同,类型不同也是跟数组最本质的区别了。
(2)元组和列表十分相似,不过元组是不可变的,即不能修改元组。元组用“()”表示,元组可以嵌套。
(3)集合特性:与字典类似,但只包含键,而没有对应的值,包含的数据不重复。
创建:s=set(list or tuple or string),重复的值在集合中只存在一个。
(4)字典即把键(名字)和值(详细情况)联系在一起,键必须是唯一的。键值对在字典中以这样的方式标记:d={key1:value1 , key2:value2}。键/值对用冒号分割,而各个对用逗号分割,所有这些都包括在花括号中。
3.词频统计
步骤如下:
(1)下载一长篇小说,存成utf-8编码的文本文件file;
(2)通过文件读取字符串str;
(3)对文本进行预处理;
(4)分解提取单词list;
(5)单词计数字典set,dict;
(6)按词频排序list.sort(key=lambda),turple;
(7)排除语法型词汇,代词、冠词、连词等无语义词;
(8)输出TOP(20);
(9)可视化:词云。
排序好的单词列表word保存成csv文件。
1 exclude={'a','the','and','i','you','in','but','not','with','by','its','for','of','an','to'} #定义数组# 2 #读取Harry Potter.txt文件中的英文内容# 3 def gettxt(): 4 sep=".,:;?!-_'" 5 txt=open('Harry Potter.txt','r').read().lower() 6 for ch in sep : 7 txt=txt.replace(ch,' ') 8 return txt 9 #分解提取单词# 10 bigList=gettxt().split() 11 print(bigList); 12 print('big:',bigList.count('big')) 13 bigSet=set(bigList) 14 #过滤单词,包括一些冠词和连词等# 15 bigSet=bigSet-exclude 16 print(bigSet) 17 #单词计数# 18 bigDict={} 19 for word in bigSet: 20 bigDict[word]=bigList.count(word) 21 print(bigDict) 22 23 print(bigDict.items()) 24 word=list(bigDict.items()) 25 #按词频排序# 26 word.sort(key=lambda x:x[1],reverse=True) 27 print(word) 28 #输出频率较高的词语top20# 29 for i in range(20): 30 print(word[i]) 31 #排序好的单词列表word保存成csv文件# 32 import pandas as pd 33 pd.DataFrame(data=word).to_csv('Harry Potter.csv',encoding='utf-8')
运行结果如下所示:
作者:buildings
声明 :对于转载分享我是没有意见的,出于对博客园社区和作者的尊重请保留原文地址哈。
致读者 :坚持写博客不容易,写高质量博客更难,我也在不断的学习和进步,希望和所有同路人一道用技术来改变生活。觉得有点用就点个赞哈。