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

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

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

  • 括号
  • 有序无序
  • 可变不可变
  • 重复不可重复
  • 存储与查找方式

 

列表:list1 = ['python',2019,'java',1997]

  列表的数据项不需要具有相同的类型,创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可

  list[index]:访问列表下标为index的值,赋值修改下标index的值  del list[index]:删除列表下标为index的值  list[ : ]:截取列表中的片段

  len(list):返回列表的长度  max(list):返回列表中的最大值  min(list):返回列表中的最小值  list(seq):将元组转换成列表

  list.append(obj):在列表末尾添加新的对象   list.count(obj):统计某个元素在列表中出现的次数  

  list.extend(seq):在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)

  list.index(obj):从列表中找出某个值第一个匹配项的索引位置  list.insert(index, obj):将对象插入列表

  list.pop([index=-1])移除列表中的一个元素(默认最后一个元素),并且返回该元素的值

  list.remove(obj)移除列表中某个值的第一个匹配项  list.sort(key=None, reverse=False)对原列表进行排序

元组:tup1 = ('python',2019,'java',1997)

  元组与列表类似,不同之处在于元组的元素不能修改

  创建元组,只需要在括号中添加元素,并使用逗号隔开即可

  元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用;

  元组中的元素值不允许修改,tup[index]:访问元组下标为index的值,可通过tup = tup1+tup2对元组进行连接组合

  元组中的元素值不允许删除,del tup:删除整个元组  tup[ : ]:截取元组中的片段

  len(tup):返回元组的长度  max(tup):返回元组中的最大值  min(tup):返回元组中的最小值  tup(seq):将列表转换成列表

字典:dict = {'a': '1', 'b': '2', 'c': '3'}

  字典是另一种可变容器模型,且可存储任意类型对象。

  字典的键必须是唯一的,但值则不必

  字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})

  dict['key']:访问字典中的值,赋值修改key对应的值  dict['key'] = value:添加键值对

  del dict['key']:删除键 'key'  dict.clear():清空字典  del dict :删除字典

  len(dict):返回字典元素的个数  str(dict):输出字典,以可打印的字符串表示

  dict.items():返回可遍历的(键, 值) 元组数组  pop(key[,default]):删除字典给定键 key 所对应的值,返回值为被删除的值

集合:set1= {value01,value02,...} 或者 set(value) 

  集合是一个无序的不重复元素序列,可以使用大括号 { } 或者 set() 函数创建集合

  set1 - set2:集合set1中包含而集合set2中不包含的元素

  set1 | set2:集合set1 或set2中包含的所有元素

  set1 & set2:集合set1和set2中都包含了的元素

  set1 ^ set2:不同时包含于set1和set2的元素

  set.add(elmnt):添加元素  set.pop(): 随机移除一个元素  set.remove(item):移除集合中的指定元素

  set.update:修改当前集合,可以添加新的元素或集合到当前集合中

 

3.词频统计

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

3.2通过文件读取字符串 str

3.3对文本进行预处理

3.4分解提取单词 list

3.5单词计数字典 set , dict

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

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

  自定义停用词表

  或用stops.txt

3.8输出TOP(20)

3.9可视化:词云

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

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

线上工具生成词云:
https://wordart.com/create
import requests
from bs4 import BeautifulSoup
from fake_useragent import UserAgent
import re
from nltk.corpus import stopwords
import pandas as pd


def get_text():
    url = 'http://novel.tingroom.com/jingdian/2857/78803.html'
    ua = UserAgent()
    headers = {'User_Agent': ua.random}
    html = requests.get(url,headers= headers) #请求得到链接
    html.encoding = 'utf-8' #编码
    soup = BeautifulSoup(html.text,'lxml') #操作html文档
    Eng_text = soup.find('div',class_='text').get_text() #获取text文本
    Eng_text = re.sub('<!-[\s\S]*?-->','',Eng_text)  #去text的注释
    Eng_text = Eng_text.replace('欢迎访问英文小说网http://novel.tingroom.com','').replace('只需30秒,测测你的英语词汇量!','') #去text后面的文本
    Eng_text = Eng_text.strip('\t\n\r').lstrip().rstrip() #去空行、空格

    #保存text文件
    with open('Eng_text.txt','w') as f:
        f.write(Eng_text)

    Eng_text = Eng_text.lower()  # 将所有大写转换为小写
    s = ',.?!\";'
    for i in s:
        Eng_text = Eng_text.replace(i, ' ')  # 将所有其他做分隔符(,.?!)替换为空格
    Eng_text = Eng_text.split()  # 分隔出一个一个的单词
    InfoSet = set(Eng_text) #集合方式获得每个单词
    Count = {}
    for txt in InfoSet:
        Count.setdefault(txt, Eng_text.count(txt))  # 统计单词出现的次数
    words = stopwords.words('english') #英语的stopwords
    for word in words:
        Stopword = Count.pop(word,'none') #删除字典中的停用词,返回删除对象,没有则返回none

    Count = sorted(Count.items(), key=lambda x: x[1],reverse=True) #按values的值从大到小排序,返回列表,以数组存储键值对
    Top = Count[:20] #截取前20个
    print(Top)

    pd.DataFrame(data=Top).to_csv('TOP20.csv', encoding='utf-8') #将前20个保存成csv文件,excel打开
if __name__ == '__main__':
    get_text()

posted on 2019-03-21 20:17  KevinShem  阅读(193)  评论(0编辑  收藏  举报