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

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

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

1、列表

•增

list1=['空无之钥','雨后誓言','永暮双狼','犹大誓约','阿芙洛狄忒']
print(list1)
#在列表末尾添加新的对象
list1.append('鲜血之舞')
print(list1)
#将对象插入列表
list1.insert(1,'幽色咏叹调')
print(list1)
list2=list(range(4))
#在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
list1.extend(list2)
print(list1)

•删

list1=['空无之钥',1,'雨后誓言','永暮双狼','犹大誓约',1,'阿芙洛狄忒']
print(list1)
#移除列表中的一个元素(默认最后一个元素)
list1.pop()
print(list1)
list1.pop(2)
print(list1)
#移除列表中某个值的第一个匹配项
list1.remove(1)
print(list1)
#删除列表下标为1的值
del list1[1]
print(list1)
#删除列表
del list1

  

•改

list1=['空无之钥',1,'雨后誓言','永暮双狼','犹大誓约',1,'阿芙洛狄忒']
print(list1)
#修改列表下标为1的元素
list1[1]='草履虫'
print(list1)

•查

list1=['空无之钥',1,'雨后誓言','永暮双狼','犹大誓约',1,'阿芙洛狄忒']
print(list1)
#输出列表下标为2的元素
print(list1[2])
#输出右侧倒数第三个元素
print(list1[-3])
#输出下标为2到4的元素
print(list1[2:5])
#输出从第三个元素开始后的所有元素
print(list1[2:])

2、元组

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

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

 元组中的元素值不允许修改,但可以对元组进行连接组合。

tup1 = (50)
# 不加逗号,类型为整型
print(type(tup1))  
tup1
= (50,) # 加上逗号,类型为元组 print(type(tup1))
tup1=tuple(range(4))
tup2='a','b','c','d'
print('元组1:',tup1)
print('元组2:',tup2)
#输出元组1中下标为1的元素
print('tup1[1]:',tup1[1])
#输出元组1中元素最小值
print('元组1中元素最小值:',min(tup1))
#输出元组2中元素最大值
print('元组2中元素最大值:',max(tup2))
#元组连接组合
tup3=tup1+tup2
print('组合后的元组:',tup3)

3、字典

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

dict1={'空无之钥':'律化娜','雨后誓言':'芽衣','永暮双狼':'浮华','犹大誓约':'德丽莎'}
print(dict1)
#新增键值对
dict1['阿芙洛狄忒']="丽塔"
print(dict1)
#删除单一元素,通过key来指定删除,通过pop()或del方法
dict1.pop('犹大誓约')
print(dict1)
del dict1['雨后誓言']
print(dict1)
#修改,值可以取任何数据类型,但键必须是不可变的
dict1['空无之钥']='草履虫'
print(dict1)

4、集合

集合(set)是一个无序的不重复元素序列,可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

set1={'空无之钥','雨后誓言','永暮双狼','犹大誓约','阿芙洛狄忒'}
print(type(set1))
print(set1)
#新增元素,若元素已存在,则不进行任何操作
set1.add('鲜血之舞')
print(set1)
#新增元素,update(),参数可以是列表,元组,字典等
set1.update(['卡莲','八重樱'])
print(set1)
#删除元素
#remove()方法,如果元素不存在,则会发生错误
set1.remove('八重樱')
print(set1)
#discard()方法,元素不存在也不会发生错误
set1.discard('八重樱')
print(set1)

二、总结列表,元组,字典,集合的联系与区别。

列表list用[]表示,有序序列,元素可变,可重复,可通过下标索引查找,如list[1];

元组tup用()表示,有序序列,元素不可变,可重复,可通过下标索引查找,如tup[0];

字典dict用{}表示,无序序列,元素中键不可重复,值可以取任何数据类型,可以重复,元素以键值对的方式存储,一般通过键(key)查找,如dict[key];

集合set用{}表示,无序序列,元素可变,不可重复,不能通过下标索引查找。

三.词频统计 

from nltk.corpus import stopwords
import re
import pandas as pd
#读取文本
def get_text(file):
    #打开文件,并将所文本转换成小写
    fp=open(file,'r',encoding='utf-8').read().lower()
    #正则表达式移除文本中的数字
    fp = re.sub(r'[1-9]\d*','',fp)
    sep = '-,.?!:\"\'\n'
    #将sep中的符号替换成空格
    for i in sep:
      fp = fp.replace(i,' ')
    return fp

#词频统计
def get_wordsort(fp):
    #分隔单词
    words_list = fp.split()
    stop_words = {'mr','could','would','said','mrs','much','must','though','never'}
    #获取英文停用词
    words = stopwords.words('english')
    #移除停用词
    words_set = set(words_list)-set(words)-stop_words
    words_dict = {}
    #将单词存入字典
    for i in words_set:
        words_dict[i] = words_list.count(i)
    #排序
    words_sort = sorted(words_dict.items(),key=lambda x:x[1],reverse=True)
    #输出词频top20
    for i in range(20):
        print(words_sort[i])
    return words_sort

if __name__ == '__main__':
    fp = get_text('Pride and Prejudice1.txt')
    words_sort = get_wordsort(fp)
    #将排序后的单词列表保存为CSV文件
    pd.DataFrame(data=words_sort).to_csv('top20.csv',encoding='utf-8')

                                               

posted @ 2019-03-24 17:18  梁林森  阅读(215)  评论(0编辑  收藏  举报