集合类型及其操作
-集合类型定义
-集合操作符
-集合处理方法
-集合类型应用场景
1.集合类型定义
集合是多个元素的无序组合,与数学中的集合概念一致,集合中的每个元素唯一,不存在相同元素,放入集合中的元素不可更改,不能是可变数据类型。生成一个集合用{}或者set()函数,需要建立空集合的时候,必须使用set函数
例:A={"python",123,("python",123)} #{ "python",123,("python",123)}
B=set("pypy123") #{'1','2','3','p','y'}
2.集合操作符
-S|T #并运算 返回一个新集合,包括集合S和T中的所有元素
-S-T #差运算 返回一个新集合,包括集合S但不在T中的元素
-S&T #交运算 返回一个新集合,包括同时在集合S和T中的元素
-S^T #补运算 返回一个新集合,包括集合S和T中的非相同元素
-S<=T或者S<T 返回True/False,判断S和T的子集关系
-S>=T或者S>T 返回True/False,判断S和T的包含关系
3.集合处理的方法
S.add(x) 添加元素
S.discard(x) 移除元素,如果x不在S中则报错
S.remove(x) 移除元素,如果x不在S中,产生KeyError异常
S.clear() 移除S中所有元素
S.pop() 从集合中随机取出并删除一个元素,若S为空,则产生KeyError异常
S.copy() 返回一个S副本
函数:
len(S) 求S中元素个数
x in S 返回BOOL类型
x not in S 同上
set(x) 将其他类型变量x转换为集合类型
4.集合类型应用场景
-包含关系的比较
-数据去重 ls=[1,1,2,3] s=set(ls) ls=list(s) #ls[1,2,3]
序列类型及其操作
-序列类型的定义
-序列处理函数及方法
-元组类型及操作
-列表类型及操作
-序列类型应用场景
1.序列类型的定义
序列是具有先后关系的一组元素,可以理解为一维元素向量,元素之间可以相同,类型也可以不同。可以通过整数下标方式(0`~n-1或者-1~-n),对序列进行访问。序列类型是一种基类类型,有序列类型衍生出字符串类型、元组类型、列表类型,但是序列类型的所有操作在这三个衍生类型中都是适用的,这三种衍生类型又有各自的独特的操作
2.序列处理函数及方法
x in s
x not in s
s + t
s*n或者n*s
s[i]
s[i:j]
s[i:j:k]
len(s) 返回序列长度
min(s) 序列中的元素要能比较才能使用这两个方法,否则报错
max(s)
s.index(x)/s.index(x,i,j) 返回序列s从i开始到j位置中第一次出现元素x的位置
s.count(x) 返回x出现的次数
3.元组类型及其操作
元组一旦被创建就不能被修改,使用()或者tuple()创建,元素间用逗号分隔,也可以不使用小括号,直接逗号隔开。
例如 def func():
return 1,2 #实际上返回的是一个元组
因为元组一旦创建就不能修改,因此没有什么特殊的操作
4.列表类型及操作
创建后可以修改,使用[]或者list()创建,用逗号分隔
列表中各元素的类型可以不同,没有长度限制
ls=lt #若修改列表ls中的值,则列表lt中的值也会改变,因为这两个引用指向的是同一个变量
del ls[i] 删除列表ls中的第i个元素
del ls[i:j:k] 删除从i开始以k为步长的元素
ls+=lt 将lt中元素加到ls中
ls*=n 更新列表使其重复n次
ls.append(x)
ls.clear()
ls.copy()
ls.insert(i,x)
ls.pop(i) 从第i个位置取出并删除
ls.remove(x) 删除第一个出现的x
ls.reverse() 反转
sorted(ls) 排序
5序列类型的应用场景
-元组用于元素不改变的应用场景,更多用于固定搭配场景
-列表更加灵活,是最常用的序列类型
-最主要作用:表示一组有序数据,进而操作它们
基本统计值计算
略
字典类型及操作
-字典类型的定义
-字典处理函数及方法
-字典类型引用场景
1.字典类型的定义
键值对,相当于于c++或者java中的map,使用{}或者dict()创建,键值对用:表示
{键1:值1,键2:值2...},在字典类型中,可以通过[键名]来索引键对应的值,可以直接dic[键名]=值的方式向字典中添加元素。
d={} 表示声明一个字典类型,而不是集合类型
2.字典处理函数及方法
del d[k] 删除键k对应的键值对
k in d 判断键k是否在d中
d.keys() 返回字典中所有的键信息,返回的是一种字典的key类型,并不是列表类型,不能当作列表类型使用 但是可以 用for in 的方式遍历
d.values() 返回字典中所有值的信息 ,返回的是一种字典的value类型,并不是列表类型,不能当作列表类型使用 但是可以 用for in 的方式遍历
d.items() 返回字典中所有键值对的信息
d.get(k,<default>) 键K存在,则返回对应的值,否则返回default
d.pop(k,<default>) 键k存在,则返回并删除相应的值,否则返回default
d.popitem() 从字典中随机取出一个键值对,以元组形式返回
d.clear() 删除d中所有键值对
len(d) 返回字典d中元素的个数
3.字典类型的应用场景
-映射的表达
jieba库的使用
-jieba库基本介绍
-jieba库使用说明
1.jieba库基本介绍
中文文本需要通过分词获得单个的词语
jieba库是优秀的中文分词第三方库,需要额外安装
jieba库提供三种分词模式,最简单只需掌握一个函数
jieba库利用一个中文词库,确定汉字之间的关联概率,汉字间概率大的组成词组,形成分词结果
2.jieba库使用说明
-精确模式:把文本精确的分开 ,不存在冗余单词
-全模式:把文本中所有可能的词语扫描出来,有冗余
-搜索引擎模式:在精确模式的基础上,对长词再进行切分,适合搜索引擎对短词语的搜索,也存在冗余
jieba库常用函数
jieba.lcut(s) 对字符串进行精确模式切分
jieba.lcut(s,cut_all=True) 全模式切割
jieba.lcut_for_search(s) 搜索引擎模式切割
jieba.add_word(s) 向分词词典增加新的词语s
文本词频统计
英文词频统计
#CalHamletV1.py
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.item())
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))
中文词频统计
#CalThreeKingdomsV2.py
import jieba
txt=open("threekingdomd.txt","r",encoding="utf-8").read()
excludes={"将军","却说","荆州","二人","不可","不能","如此"}
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(10):
word,count=item[i]
print("{0:<10}{1:>5}".format(word,count))