复合数据类型,英文词频统计

作业来自于 https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2753

1.列表,元组,字典,集合分别如何增删改查及遍历。

列表的增删改查

 1 list = ['张三', 66, 'jack']
 2 # 按索引号插入元素
 3 list.insert(0,'王一')
 4 print(list)
 5 # 增加到最后
 6 list.append(78)
 7 print(list)
 8 list1 = [999]
 9 # 可以与其它list合并
10 list.extend(list1)
11 print(list)
12 # 按索引查找
13 print(list[0])
14 # 删掉最后一个元素
15 list.pop()
16 print(list)
17 # 按索引删除
18 list.pop(0)
19 print(list)
20 # 按切片删除
21 del list[0:2]
22 print(list)
23 # 按元素删除
24 list.remove(78)
25 print(list)
26 # 删除整个列表
27 list = ['张三', 66, 'jack']
28 # 改变第一个元素
29 list[0] = '李四'
30 print(list)
31 list.clear()
32 print(list)
33 # 遍历
34 for i in list:
35     print(i)

运行结果:

 

元组的增删改查

1 tuple = ('张三', 66, 'jack')
2 # 按索引查找
3 print(tuple[0])
4 # 遍历
5 for i in tuple:
6     print(i)

运行结果

 

集合的增删改查

 1 list = ['张三', 66, 'jack']
 2 set = set(list)
 3 # 增加一个元素,位置随机
 4 set.add('李四')
 5 print("add('李四'):" + set.__str__())
 6 # 按元素删除
 7 set.remove(66)
 8 print('remove(66):' + set.__str__())
 9 # 删除并返回任意set元素。
10 set.pop()
11 print('pop():' + set.__str__())
12 # 删除整个集合
13 set.clear()
14 print('clear():' + set.__str__())
15 # 遍历
16 for i in set:
17     print(i)

运行结果

字典的增删改查

 1 age_dict = {'李四': 15, 'jack': 17, '王五': 20, '刘一':17}
 2 # 按照key来取item的value
 3 print(age_dict['刘一'])
 4 # 修改value
 5 age_dict['刘一'] = 50
 6 print(age_dict['刘一'])
 7 # 整个字典
 8 print(age_dict.items())
 9 # 字典所有的value
10 print(age_dict.values())
11 # 字典所有的key
12 print(age_dict.keys())
13 # 按key删除一个item 并返回被删除item的value
14 print(age_dict.pop('李四'))
15 print(age_dict)
16 # 根据key得到value的值
17 print(age_dict.get('jack'))
18 # 删除字典最后一个item
19 age_dict.popitem()
20 print(age_dict)
21 # z设置一个item添加到dict后面,不提供第二个参数则key默认为None
22 age_dict.setdefault('nacy', 5)
23 print(age_dict)
24 age_dict.setdefault('tom')
25 print(age_dict)
26 new_dict = {'': 15}
27 age_dict.update(new_dict)
28 # 把字典dict2(new_dict)的键/值对更新到dict(age_dict)里。
29 print(age_dict)
30 # 删除整个dict
31 age_dict.clear()
32 print(age_dict)

运行结果

2.总结列表,元组,字典,集合的联系与区别。参考以下几个方面:

(1)括号

list的括号为[],tuple的括号为(),set的括号为{},dict的括号为{}。

(2)有序无序

list与tuple是有序的,set与dict是无序的.

(3)可变不可变

list的元素是可变的,tuple、set的元素是不可变的,dict的key必须是不可变对象。

(4)重复不可重复

list、tuple的元素可重复,set、dict的元素不可重复。

(5)存储与查找方式

dict与list相比

  1)查找和插入的速度极快,不会随着key的增加而变慢;

  2)需要占用大量的内存,内存浪费多。

list与dict相比

  1)查找和插入的时间随着元素的增加而增加;

  2)占用空间小,浪费内存很少。

tuple与list类似,可以直接用索引取元素,存储的方式类似数组,set与dict类似,用key查找元素,存储利用哈希算法,每一个key都可以用hash算法算得一个唯一的值,然后把key存储进这个值指定的内存空间。

3.词频统计

  • 1.下载一长篇小说,存成utf-8编码的文本文件 file

    2.通过文件读取字符串 str

    3.对文本进行预处理

    4.分解提取单词 list

    5.单词计数字典 set , dict

    6.按词频排序 list.sort(key=lambda),turple

    7.排除语法型词汇,代词、冠词、连词等无语义词

    • 自定义停用词表
    • 或用stops.txt

       8.输出TOP(20)

  • 9.可视化:词云

 排序好的单词列表word保存成csv文件

import pandas as pd
pd.DataFrame(data=word).to_csv('big.csv',encoding='utf-8')

线上工具生成词云:
https://wordart.com/create

 代码

 1 import pandas as pd
 2 # 读取小说
 3 with open(r'./Sophies World.txt', 'r', encoding='utf8') as f:
 4     book = f.read()
 5 booksymbol = [" '", "'", ' "', '"', '""', '\n', '\t', '', '?', '!', "", ',', '', '.', '']
 6 # # 去掉一些不必要的标点符号
 7 for i in booksymbol:
 8     book = book.replace(i, '')
 9 # 把所有转小写 以空格分隔开
10 book = book.lower().split()
11 # # 读取停用词
12 with open(r'./stops.txt', 'r', encoding='utf8') as f:
13     stops = f.read()
14 #  整理停用词格式,去掉回车和单双引号
15 stopsymbol = [" '", "'", ' "', '"', '\n']
16 for i in stopsymbol:
17     stops = stops.replace(i, '')
18 # 以逗号分隔
19 stops = stops.split(',')
20 worddict = {}
21 # 去掉停用词
22 wordset = set(book) - set(stops)
23 # 计算词频
24 for i in wordset:
25     worddict[i] = book.count(i)
26 # 让其变成可排序的list
27 wordcount = list(worddict.items())
28 # 把value作为排序的对象
29 wordcount.sort(key = lambda x:x[1], reverse = True)
30 # Top20生成csv文件
31 pd.DataFrame(data=wordcount[0:20]).to_csv('big.csv',encoding='utf-8')

运行结果

作业博客要求:

  • 文字作业要求言简意骇,用自己的话说明清楚。
  • 编码作业要求放上代码,加好注释,并附上运行结果截图。

posted on 2019-03-16 22:21  Lijiajun  阅读(363)  评论(0编辑  收藏  举报

导航