zoukankan      html  css  js  c++  java
  • 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')

    运行结果如下所示:

  • 相关阅读:
    URLProtocol服务协议
    ODBC、OLEDB和ADO之间的关系 ,以及性能比较
    如何在VS2015查看C#界面窗体里的控件层次
    SpeechVoiceSpeakFlags枚举类型的详细解释
    SQL中遇到多条相同内容只取一条的最简单实现方法
    flink elasticsearch sink table 忽略部分字段开发
    flink elasticsearch source table 集成elasticsearch-hadoop connector开发
    记一次python 协程给合多线程死锁问题
    kubernetes gitlab runner java maven ci/cd 整体方案示例
    某云elasticsearch节点失效,手动重置primary,迁移分区
  • 原文地址:https://www.cnblogs.com/luengmingbiao/p/10596654.html
Copyright © 2011-2022 走看看