python入门知识点笔记-day5组合数据类型 实例“基本统计值计算”实例“文本词频统计”

#1组合数据类型:组合数据类型为多个同类型或不同类型数据提供单一表示,使数据操作更有序,更容易。组合数据类型分为三类:序列类型,集合类型和映射类型。
在这里插入图片描述

##1.1集合类型
###1.1.1 集合是多个元素的无序类型。集合类型与数学中集合的概念一致;集合元素之间无序,每个元素唯一,不存在相同元素;集合元素不可更改,不能是可变数据类型。
集合用”{}“表示,元素之间用逗号分隔;建立集合类型用”{}“或set();
建立空集合类型必须使用set()。
###1.1.2 集合类型的操作符
集合类型有4种基本操作:交集(&)并集(|)差集(-)补集(^),操作逻辑与数学定义相同。

基本操作符:
在这里插入图片描述
增强操作符
在这里插入图片描述

集合类型的操作函数或方法:
在这里插入图片描述
在这里插入图片描述

##1.2序列类型
序列类型是一维元素向量,元素之间可以相同,元素类型可以不同,元素之间存在先后关系,通过序号访问,类似于数学元素序列:S0,S1…S(n-1)。元素间由序号引导,通过下标访问序列的特定元素。
在这里插入图片描述

序列类型的索引体系:
在这里插入图片描述
序列类型的通用操作符和函数:
在这里插入图片描述
在这里插入图片描述

###1.2.1字符串类型
字符串类型就是序列类型的一种扩展,只不过每个元素在字符串中只是一个字符,而在序列类型中,其中每一个元素可以是·任何一种数据类型。

###1.2.2元组类型
使用小括号或tuple()创建,元素间用逗号隔开。元组类型就是将元素进行有序的排列,用”()“形式组织。元组继承了序列类型的全部通用操作;元组因为创建后不能修改,因此没有特殊操作;使用或不使用括号。

creature = "cat", "dog", "tiger","human"
print(creature)
creature = "cat", "dog", "tiger","human"
color = (0x001100,"blue","red",creature)
print(color)

对比两种代码运行结果,显而易见得出元组的特点。

###1.2.3列表类型
列表类型是一种序列类型,创建后可以随意被修改;使用[]或list()创建,元素之间用逗号隔开;列表中各元素类型可以不同,无长度限制。
在这里插入图片描述
在这里插入图片描述

ls = ["cat", "dog", "tiger","human"]
lt = ls
print(lt)

方括号真正创建一个列表,赋值仅传递作用,并没有再次创建。

ls = ["cat", "dog", "tiger","human","1024"]
ls[1:2] = [1, 2, 3, 4]     #将最初ls列表中1到2位中间增加[1,2,3,4]
print(ls)
ls = ["cat", "dog", "tiger","human","1024"]
ls[1:2] = [1, 2, 3, 4]
del ls[::3]       #删除列表中以3为步长的子序列
print(ls)
ls = ["cat", "dog", "tiger","human","1024"]
ls[1:2] = [1, 2, 3, 4]
del ls[::3]
lt = ls * 2      #对列表进行元素复制
print(lt)
ls = ["cat", "dog", "tiger","human","1024"]
ls.append(11234)   #在列表最后增加元素"11234"
print(ls)
ls = ["cat", "dog", "tiger","human","1024"]
ls.insert(3, "red")   #在列表第三位增加元素“red”
print(ls)
ls = ["cat", "dog", "tiger","human","1024"]
ls.reverse()   #将列表ls元素进行反转
print(ls)

列表功能
在这里插入图片描述
在这里插入图片描述

#2实例:基本统计值计算
基本统计值:
总个数:len()
求和:for…in
平均值:求和/总个数
方差:各数据与平均数差的平方的和的平均数
中位数:排序

from math import sqrt
def getNum():    #获取用户输入
    nums = []
    iNumStr = input("请输入数字(直接输入回车退出):")
    while iNumStr != "":         #获取多个数据的实现方法
        nums.append(eval(iNumStr))
        iNumStr = input("请输入数字(直接输入回车退出):")
    return nums
def mean(numbers):      #计算平均值
    s = 0.0
    for num in numbers:
        s = s + num
    return s / len(numbers)
def dev(numbers, mean):       #计算标准差
    sdev = 0
    for num in numbers:
        sdev = sdev + (num - mean)**2
    return s.rt(sdev / (len(numbers)-1))
def median(numbers):        #计算中位数
    sorted(numbers)
    new = sorted(numbers)
    size = len(numbers)
    if size % 2 ==0:
        med = (new[size//2-1] + new[size//2])/2
    else:
        med = new[size//2]
    return med
n = getNum()    #主体函数
m = mean(n)
print("平均值:{},标准差:{:.2},中位数:{}.".format(m,dev(n,m),median(n)))

#3字典类型
##3.1映射类型
映射类型是”键(索引)-值(数据)“数据项的组合,每一个元素是一个键值对,即元素是(key-value),元素之间是无序的。键值对是一种二元关系,源于属性和值的映射关系。
序列类型由0,1,2…N整数作为数据的默认索引。映射类型是将默认的索引,改为用户自定义的索引,映射类型是由用户为数据定义索引的一种映射类型。
键(key)表示一个属性,也可理解为一个类别或项目,值(value)是属性的内容,键值对刻画了一个属性和它的值。键值对将映射关系结构化,用于存储和表达。映射类型主要以字典体现。字典类型是数据组织与表达的一种新的形态。

##3.2字典类型
键值对:键是是对数据索引的扩展。
字典是键值对的集合,键值对之间无序。采用大括号和dict()创建,键值对用冒号表示。
<字典变量> = {<键1>:<值1>,<键2>:<值2>,…,<键n>:<值n>}

<值> = <字典变量>[<键>]
[]用来向字典变量中索引或增加元素。

##3.3字典处理函数及方法
在这里插入图片描述
在这里插入图片描述

d = {"中国":"北京","美国":"华盛顿","法国":"巴黎"}
print("中国" in d)   #判断索引”中国“是否在字典中
d = {"中国":"北京","美国":"华盛顿","法国":"巴黎"}
print(d.keys())   #调用字典中的所有键
d = {"中国":"北京","美国":"华盛顿","法国":"巴黎"}
print(d.values())   #调用字典中的所有值
d = {"中国":"北京","美国":"华盛顿","法国":"巴黎"}
print(d.get("中国","伊斯兰堡"))  #以中国为键获取字典d中的值
d = {"中国":"北京","美国":"华盛顿","法国":"巴黎"}
print(d.get("巴基斯坦","伊斯兰堡"))
d = {"中国":"北京","美国":"华盛顿","法国":"巴黎"}
print(d.popitem())    #从字典中随机获取一个键值对

字典功能
在这里插入图片描述

字典也可以通过for-in语句对其元素进行遍历

for <变量名> in <字典名>:
    <语句块>

映射无处不在,键值对无处不在。例:统计数据出现的次数,数据是键,次数是值。

#4jieba库的使用
jieba库的分词原理是利用一个中文库,将待分词的内容与分词词库进行比对,通过图结构和动态规划方法找到最大概率的词组。除了分词,jieba还提供增加自定义中文单词的功能。
jieba库的三种分词模式:
精确模式:把句子最精确地切开,适合文本分析,不存在冗余单词;
全模式;把句子中所有可以成词的词语都扫描出来,速度快但不能消除歧义,有冗余;
搜索引擎模式:在精确的基础上,对长词再次切片,提高召回率,适合用于搜索引擎分词,有冗余。

常用函数:
在这里插入图片描述
在这里插入图片描述

#5实例:Hamlet英文词频统计

def getText():
    txt = open("hamlet.txt", "r").read()  #读取文件
    txt = txt.lower()           #将所有英文字母变为小写
    for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_`~':    
        txt = txt.replace(ch," ")    #将文章中所有标点符号转化为空格
    return txt
hamleTxt = getText()
words = hamleTxt.split()     #将文章中所有单词分隔
counts = {}     #生成一个空子典
for word in words:
    counts[word] = counts.get(word,0) + 1    #统计出现单词数量
items = list(counts.items())          #转换成列表
items.sort(key=lambda x:x[1], reverse=True)    #排序
for i in range(10):
    word, count = items[i]
    print("{0:<10}{1:>5}".format(word, count))

#6实例《三国演义》人物出场统计

import jieba     #调用jieba库
txt= open("三国演义.txt", "r", encoding='utf-8').read()   #打开文本文件
words = jieba.lcut(txt)     #返回列表类型的分词结果
counts = {}       #定义空字典
for word in words:
    if len(word) == 1:
        continue
    else:
        counts[word] = counts.get(word, 0) + 1   #统计词组出现次数
items = list(counts.items())      #转换为列表
items.sort(key=lambda x : x[1], reverse=True)    #进行排序
for i in range(15):     #输出前15
    word, count = items[i]
    print ("{0:<10}{1:>5}".format(word, count))
import jieba
excludes = {"将军","却说","荆州","二人","不可","不能","如此"}
txt = open("三国演义.txt", "r",encoding='utf-8').read()
words = jieba.lcut(txt)
counts = {}
for word in words:
    if len(word) == 1:
        continue
    elif word == "诸葛亮" or word == "孔明曰":
        rword = "孔明"
    elif word == "关公" or word == "云长":
        rword = "关羽"
    elif word == "玄德" or word == "玄德曰":
        rword = "刘备"
    elif word == "孟德" or word == "丞相":
        rword = "曹操"
    else:
        rword = word
    counts[rword] = counts.get(rword, 0) + 1
for word in excludes:
    del(counts[word])
items = list(counts.items())
items.sort(key=lambda x : x[1], reverse=True)
for i in range(15):
    word, count = items[i]
    print ("{0:<10}{1:>5}".format(word, count))

本章学习首先是对组合数据类型进行深入了解,组合数据类型分为序列类型,集合类型和映射类型。最为重要的是序列类型和映射类型,其中序列类型又分为字符串,元组和列表,这里面需要重点学习的是列表和元组,映射类型里面需要重点学习的是字典。学习组合数据类型先要分清所属关系,然后重点理解和应用。这些类型中包括很多函数功能和方法需要我们深入的理解。实例“基本统计值计算”和实例“文本词频统计”需要我们看懂代码,了解函数应用的方法。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值