集合
不可变数据类型
建立:
A={"python",123,("python",123)} #使用{}建立集合
B=set("pypy123") #使用set建立集合
print(A) #{123, 'python', ('python', 123)}
print(B) #{'2', 'p', '3', 'y', '1'} 集合元素没有顺序
集合运算:
S|T 返回一个新集合S∪T
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
S-=T 返回一个新集合S-T,赋予S
S&=T 返回一个新集合S∩T,赋予S
S^=T 返回一个新集合,包括S、T中的非相同元素,赋予S
集合的方法:
S.add(x) 如果x不在集合S中,将x增加到S移除S中元素x
S.discard(x) 如果x不在集合S中,不报错
S.remove(x) 移除S中元素x,如果x不在集合S中,产生KeyError异常
S.clear() 清空
S.pop() 随机返回一个元素并移除,S为空返回Keyerror
S.cppy() 返回集合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) 将其他类型变量转成集合类型
遍历集合的两种办法:
for item in A:
print(item,end=" ")
print()
try:
while True:
print(A.pop(),end=" ")
except:
pass
数据去重
s=["p","p","y","y",123]
s=set(s)#利用了集合无重复元素的特点
t=list(s)#将集合转换为列表
print(t)
序列
具有先后关系的一组元素(一维元素向量,元素类型可以不同)
可以通过标号访问
基本类型,平时用的更多的是它的延申类型(字符串,元组,列表)
len(s) 返回序列s的长度(元素个数)
min(s) 返回序列s的最小元素,s中元素需要可比较
max(s) 返回序列s的最大元素,s中元素需要可比较
s.index(x) 返回序列s第一次出现元素x的位置
s.index(x,i,j) 返回序列s从i到j位置中第一次出现元素x的位置
s.count(x) 返回序列s中出现x的总次数
元组
元组是一种序列类型,一旦创建不能更改(保护数据)
用()或者tuple()创建
继承了序列类型的所有操作
列表
一种序列类型
用[]创建
用等号直接赋值列表相当于“引用”
方法:
del ls[i]
del ls[i:j:k]
ls+=lt
ls*=n
ls.append(x) 增加最后一个元素
ls.clear() 删除所有元素
ls.copy() 生成新链表,赋值ls中所有元素
ls.insert(i,x) 第i个位置添加x
ls.pop(i) 将第i个取出并删除
ls.remove(x) 删除第x个元素
ls.reverse() 反转
字典
映射:对应键(索引)和值(数据)的关系
列表的序列号为一种默认索引
用{}或者dict{}创建,键值对用:表示:<字典变量>={<键1>:<值1>,…,<键n>:<值n>}
方法:
d[i]=3 赋值(要确定key已存在)
del[k] 删除字典的中键k对应的数据值
k in d 判断k是否在字典d中
d,keys() 返回字典d中所有键信息
d.values() 返回字典d中所有值信息
d.get(k,< default>) 键k存在,则返回相应值,不在则返回值
d.pop(k,< default>) 键k存在,则取出相应值,不在则返回值
d.popitem() 随机从字典d中取出一个键值对,以元组形式返回
d.clear() 删除所有的键值对
len(d) 返回字典d中元素的个数
jieba库
-精确模式:把文本精确的切分开,不存在冗余单词
-全模式:把文本中所有可能的词语都扫描出来,有冗余
-搜索引擎模式:在精确模式基础上,对长词再次切分
jieba.lcut(s) 精确模式,返回一个列表类型的分词结果
jieba.lcut(s,cut_all=True) 全模式,返回一个列表类型的分词结果,存在冗余
jieba.lcut_for_search(s) 搜索引擎模式,返回一个列表类型的分词结果,存在冗余
jieba.add_word(w) 向分词词典增加新词
英文单词出现次数统计
import jieba
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))
中文单词出现次数统计
import jieba
txt=open("threekingdoms.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):
word, count=items[i]
print("{0:<10}{1:>5}". format(word, count))