python第六周学习笔记(组合数据类型)

一场游戏一场空,最终 最初都由我掌控,好像一身从容,不曾有狼狈伤痛,可深夜一个人该如何相拥?

(1)集合类型及其操作

集合类型:多个元素的无序组合
--集合类型与数学中的集合概念一致
--集合之间元素无序,每个元素唯一,不存在相同元素
--集合元素不可更改,不能是可变数据类型
---集合用大括号{}表示,元素间用逗号分隔
---建立集合类型用{}或set()
---建立空集合类型,必须使用set()
例如:A={“python”,123,{"nihao",2.2}}
集合操作符:
(1)6种基本操作符
S|T:返回一个新集合,包括集合S和T中的所有元素
S-T:返回一个新集合,包括集合S但不在集合T中的元素
S&T:返回一个新集合,包括同时在集合S和T中的元素
S^T:返回一个新集合,包括集合S和T中的非相同元素
S<=T或S S>=T或S>T:返回True/False,判断S和T的包含关系
(2)4种增强操作符
S|=T:更新集合S,包括在集合S和在集合T中的所有元素
S-=T:更新集合S,包括在集合S但不在集合T中的元素
S&=T:更新集合S,包括同时在集合S和T中的元素
S^=T:更新集合S,包括集合S和T中的非相同元素
集合处理方法:
S.add(x):如果不在集合S中,将x增加到S
S.discard(x):移除S中元素x,如果x不在集合S中,不报错
S.remove(x):移除S中元素x,如果x不在集合S中,产生KeyError异常
S.clear():移除S中所有元素
S.pop():随机返回S中的一个元素,更新S,若为空产生KeyError异常
S.copy():返回集合S的一个副本
len(S):返回集合S的元素个数
x in S:判断S中的元素x,x在集合S中,返回True,否则返回False
x not in S:判断S中的元素x,x不在集合S中,返回True,否则返回False
set(x):将其他类型变量x转变为集合类型
集合类型应用场景:
(1)包含关系比较
(2)数据去重

(2)序列类型及其操作

序列类型:具有先后关系的一组元素
--序列是一维元素向量,元素类型可以不同
--类似数学元素序列:S0,S1,S2,...,Sn-1
--元素间由序号引导,通过下标访问序列的特定元素
序列是一个基类类型
序列的序号定义:(1)正向递增(2)反向递减
序列类型通用操作符:
6种操作符
x in s:如果x是序列s的元素,返回True,否则返回False
x not in s:如果x是序列s的元素,返回False,否则返回True
s+t:连接两个序列s和t
s*n或n*s:将序列s复制n次
s[i]:索引,返回s中的第i个元素,i是序列的序号
s[i:j]或s[i:j:k]:切片,返回序列s中第i个到j以k为步长的元素的子序列
序列类型通用函数和方法:
5个函数和方法
len(s):返回序列s的长度
min(s):返回序列s的最小元素,s中元素需要可比较
max(s):返回序列s的最大元素,s中元素需要可比较
s.index(x)或s.index(x,i,j):返回序列s从i开始到j位置中第一次出现元素x的位置
s.count(x):返回序列s中x出现的总次数
序列应用场景:
(1)表示一组有序数据,进而操作它们
(2)数据保护

1.元组

元组是序列类型的一种扩展
--元组是一种序列类型,一旦创建不能修改
--使用小括号()或tuple()创建,元素间用逗号分隔
--可以使用或不使用小括号

元组使用测试:

2.列表

列表是序列类型的一种扩展,十分常用
--列表是一种序列类型,创建后可以随意被更改
--使用方括号[]或list()创建,元素间用逗号分隔
--列表中各元素类型可以不同,无长度限制
列表类型操作函数和方法:
ls[i]=x:替换列表ls第i元素为x
ls[i:j:k]=lt:用列表lt替换ls切片后对应元素子列表
del ls[i]:删除列表ls中第i元素
del ls[i:j:k]:删除列表ls中第i到第j以k为步长的元素
ls+=lt:更新列表ls,将列表lt元素增加到列表ls中
ls*=n:更新列表ls,其元素重复n次
ls.append(x):在列表ls最后增加一个元素x
ls.clear():删除列表ls中的所有元素
ls.copy():生成一个新列表,赋值ls中的所有元素
ls.insert(i,x):在列表ls的第i个位置增加元素x
ls.pop():将列表ls中第i个位置元素取出并删除该元素
ls.remove(x):将列表ls中出现的第一个元素x删除
ls.reverse():将列表ls中的元素反转

列表使用测试:

列表函数应用测试:

(3)实例:基本统计值计算


def getNum():       #获取用户不定长度的输入nums = []iNumStr = input("请输入数字(回车退出): ")while iNumStr != "":nums.append(eval(iNumStr))iNumStr = input("请输入数字(回车退出): ")return numsdef mean(numbers):  #计算平均值s = 0.0for num in numbers:s = s + numreturn s / len(numbers)def dev(numbers, mean): #计算方差sdev = 0.0for num in numbers:sdev = sdev + (num - mean)**2return pow(sdev / (len(numbers)-1), 0.5)def median(numbers):    #计算中位数sorted(numbers)size = len(numbers)if size % 2 == 0:med = (numbers[size//2-1] + numbers[size//2])/2else:med = numbers[size//2]return medn =  getNum() #主体函数
m =  mean(n)
print("平均值:{},方差:{:.2},中位数:{}.".format(m, dev(n,m),median(n)))

实列运行结果:


技术能力扩展:
--获取多个数据:从控制台获取多个不确定数据的方法
--分隔多个函数:模块化设计方法
--充分利用函数:充分利用python提供的内容函数

(4) 字典类型及其操作

字典类型及其操作
映射是一种键(索引)和值(数据)的对应
字典类型是”映射“的体现
--键值对:键是数据索引的扩展
--字典是键值对的集合,键值对之间无序
--采用大括号{}和dict()创建,键值对用冒号:表示
<字典变量>={<键1>:<值1>,...,<键n>:<值n>}
<值>=<字典变量>[<键>]
字典类型操作函数和方法:
del d[k]:删除字典d中键k对应的数据值
k in d:判断键k是否存在字典d中,如果在返回True,否则返回False
d.keys():返回字典d中所有的键信息
d.values():返回字典d中所有的值信息
d.items():返回字典d中所有键值对信息
d.get(k,):键k存在,返回相应值,不存在返回
d.pop(k,):键k存在,取出相应值,不存在返回
d.popitem():随机从字典d中取出一个键值对,以元组形式返回
d.clear():删除所有的键值对
len(d):返回字典d中元素的个数
字典类型应用场景:
(1)表达键值对数据,进而操作它们
(2)元素遍历

字典功能实现:

(5)jieba库的使用

--中文文本需要通过分词获得单个的词语
--jieba是优秀的中文分词第三方库,需要额外安装
--jieba库提供三种分词模式,最简单只需要掌握一个函数
jieba分词依靠中文词库
--利用一个中文词库,确定汉字之间的关联概率
--汉字间概率大的组成词组,形成分词结果
--除了分词,用户还可以添加自定义的词组
jieba分词的三种模式
(1)精确模式:把文本精确的切分开,不存在冗余单词
(2)全模式:把文本中所有可能的词语都扫描出来,有冗余
(3)搜索引擎模式:在精确模式的基础上,对长词再次切分
jieba库常用库函数
jieba.lcut(s):精确模式,返回一个列表类型的分词结果
jieba.lcut(s,cut_all=True):全模式,返回一个列表类型的分词结果
jieba.lcut_for_search(s):搜索引擎模式,返回一个列表类型的分词结果,存在冗余
jieba.add_word(w)向分词词典增加新词w

(6)实列:文本词频统计

1.Hamlet词频统计

def getText():txt = open("hamlet.txt", "r").read()txt = txt.lower()for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':txt = txt.replace(ch, " ")   #将文本中特殊字符替换为空格return txt
hamletTxt = getText()
words  = hamletTxt.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))

运行结果: 

2.《三国演义》人物出场统计(上)

import jieba
txt = open("threekingdoms.txt", "r", encoding='utf-8').read()
words  = jieba.lcut(txt)
counts = {}
for word in words:if len(word) == 1:continueelse: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):word, count = items[i]print ("{0:<10}{1:>5}".format(word, count))

运行结果:

3.《三国演义》人物出场统计(下)

import jieba
excludes = {"将军","却说","荆州","二人","不可","不能","如此"}
txt = open("threekingdoms.txt", "r", encoding='utf-8').read()
words  = jieba.lcut(txt)
counts = {}
for word in words:if len(word) == 1:continueelif word == "诸葛亮" or word == "孔明曰":rword = "孔明"elif word == "关公" or word == "云长":rword = "关羽"elif word == "玄德" or word == "玄德曰":rword = "刘备"elif word == "孟德" or word == "丞相":rword = "曹操"else:rword = wordcounts[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(10):word, count = items[i]print ("{0:<10}{1:>5}".format(word, count))

运行结果:

 

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部