python 学习第六天

集合类型及其操作

  -集合类型定义

  -集合操作符

  -集合处理方法

  -集合类型应用场景

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))

  

上一篇:有txt文本和图片,就能用python生成词云图


下一篇:爬虫笔记:使用python生成词云(八)