python向it新增5个元素_【第六周】组合数据类型

6.1集合类型及操作

集合类型定义

集合是多个元素的无序组合

集合类型与数学的集合概念一致

集合元素之间无序,每个元素唯一,不存在相同元素

集合元素不可更改,不能是可变数据类型

在python里面:

集合用大括号{}表示,元素间用逗号分隔

建立集合类型用{}或set()

建立空集合类型,必须使用set()

举个例子:

>>> A = {"python",123,("python,123")} # 使用{}建立集合

{123,'python',('python',123)}

>>> B = set("pypy123") # 使用set()建立集合

{'1','p','2','3','y'}

>>> C = {"python",123,"python",123}

{'python',123}

集合间操作

df277f799ddf

四种基本操作

六个操作符:

操作符及应用

描述

SlT

并,返回一个新集合,包括在集合S和T中的所有元素

S-T

差,返回一个新集合,包括在集合S但不在T中的元素

S&T

交,返回一个新集合,包括同时在集合S和T中的元素

S^T

补,返回一个新集合,包括集合S和T中的非相同元素

S<=T或S

返回True/False,判断S和T的子集关系

S>=T或S>T

返回True/Fasle,判断S和T的包含关系

四个增强操作符:

操作符及应用

描述

Sl=T

并,更新集合S,包括在集合S和T中的所有元素

S-=T

差,更新集合S,包括在集合S但不在T中的元素

S&=T

交,更新集合S,包括同时在集合S和T中的元素

S^=T

补,更新集合S,包括在集合S和T中的非相同元素

举例说明:

>>>A={"p","y",123}

>>>B=set("pypy123")

df277f799ddf

运算结果

集合处理方法

操作函数或方法

描述

S.add(x)

如果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,若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转变为集合类型

举例:

>>>A={"p","y",123}

>>>for item in A:

print(item,end="")

输出:{'p',123,'y'}

>>>try:

while True:

print(A.pop(),end=""))

except:

pass

输出:空集合

集合类型应用场景

1.包含关系比较

>>>"p"in{"p","y",123}

True #判断其它的元素是否在这个集合中

>>>{"p","y"}>={"p","y",123}

False #判断数据之间的关系

**2.数据去重**

集合类型所有元素无重复

```python

>>>Is=["p","p","y","y",123]

>>>s=set(1s) # 利用了集合无重复的特点

{'p','y',123}

>>>It=list(s) # 还可以将集合转换为列表

['p','y',123]

6.2序列类型及操作

序列类型定义

序列是具有先后关系的一组元素

序列是一维元素向量,元素类型可以不同

类似数学元素序列:S0,S1,...,Sn-1

元素间由序号引导,通过下标访问序列的特定元素

序列是一个基类类型

序列处理函数及方法

6个操作符:

操作符及应用

描述

x in s

如果x是序列s的元素,返回True,否则返回False

x not in s

如果x是序列s的元素,返回False,否则返回True

s+t

连接两个序列s和t

sn或ns

将序列s复制n次

s[i]

索引,返回s中的第i个元素,i是序列的序号

s[i:j]或[i:j:k]

切片,返回序列s中的第i到j以k为步长的元素子序列

举例说明:

>>>Is=["python",123,".io"]

>>>Is[::-1] # 切片操作,返回列表中所有元素,从元素最后向最前提取的一个子序列。将列表元素取反

['.io',123,'python']

>>>s="python123.io"

>>>s[::-1] #对字符串取反

'oi.321nohtyp'

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的总次数

>>>Is=["python",123,".io"]

>>>len(Is) # 获取长度

3

>>>s="python123.io"

>>>max(s) #获得最大元素(字母序)

'y'

元组类型及操作

元组是序列类型的一种扩展

元组是一种序列类型,一旦创建就不能被修改

使用小括号()或tuple()创建,元素间用逗号分隔

可以使用或不使用小括号

>>>creature="cat","dog","tiger","human"

>>>creature

('cat','dog','tiger','human')

>>>color=(0x001100,"blue",creature)

>>>color

(4352,'blue',('cat','dog','tiger','human'))

元组继承序列类型的全部通用操作

元组继承了序列类型的全部通用操作

元组因为创建后不能修改,因此没有特殊操作

使用或不使用小括号

使用方法:

>>>creature="cat","dog",tiger","human"

>>>creature[::-1]

('human','tiger','dog','cat')

>>>color=(0x001100,"blue",creature)

>>>color[-1][2]

'tigher'

列表类型及操作

列表是序列类型的一种扩展,十分常用

列表是一种序列类型,创建后可以随意被修改

使用方括号[]或list()创建,元素间用逗号分隔

列表中而元素类型可以不同,无长度限制

举例:

>>>Is=["cat","dog","tiger",1024]

>>>Is

['cat','dog',tigher',1024]

>>>It=Is

>>>It

['cat','dog','tiger',1024]

# 注意:方括号[]真正创建一个列表,赋值仅传递引用,Is和It仅为名称

归纳:在定义列表时如果我们使用了方括号[]或者使用了函数list,那么我们真正的创建了一个列表,如果没有使用[]或list,那么仅仅使用赋值,它只是将一段列表赋给了一个新的名字,相当于重名名。

列表类型操作函数和方法

函数或方法

描述

Is[i]=x

替换列表Is第i元素为x

Is[i:j:k]=It

用列表It替换Is切片后所对应元素子列表

del Is[i]

删除列表Is中第i元素

del Is[i:j:k]

删除列表Is中第i到第j以k为步长的元素

Is+=It

更新列表Is,将列表It元素增加到列表Is中

Is*=n

更新列表Is,其元素重复n次

举例子:

>>>Is=["cat","dog","tiger",1024]

>>>Is[1:2]=[1,2,3,4]

['cat',12,3,4,'tiger',1024]

>>>del Is[::3]

[1,2,4,'tiger']

>>>Is*2

[1,2,4,'tiger',1,2,4,'tiger']

函数或方法

描述

Is.append(x)

在列表Is最后增加一个元素

Is.clear()

删除列表Is中所有元素

Is.copy()

生成一个新列表,赋值Is中所有元素

Is.insert(i,x)

在列表Is的第i位置增加元素x

Is.pop(i)

将列表Is中的第i位置元素取出并删除该元素

Is.remove(x)

将列表Is中出现的第一个元素x删除

Is.reverse()

将列表Is中的元素反转

>>>Is=["cat","dog","tiger",1024]

>>>Is.append(1234)

['cat','dog','tiger',1024,1234]

>>>Is.insert(3,"human")

['cat',dog','tigher','human','dog','cat']

默写:

定义空列表It >>>It=[]

向It新增5个元素 >>>It+=[1,2,3,4,5]

修改It中的第2个元素 >>>It[2]=6

向It中第2个位置增加一个元素 >>>It.insert(2,7)

从It中第1个位置删除第一个元素 >>>del It[1]

删除It中第1-3位置元素 >>>del It[1:4]

判断It中是否包含数字0>>>0 in It

向It新增数字0>>>It.append(0)

返回数字0所在It中的索引>>>It.index(0)

It的长度>>>len(It)

It中最大元素>>>max(It)

清空It>>>It.clear()

序列类型应用场景

数据表示:元组和列表

元组用于元素不改变的应用场景,更多用于固定搭配场景

列表更加灵活,它是最常用的序列类型

最主要作用:表示一组有序数据,进而操作它们

1.元素遍历:

for item in Is:

# 对于列表

for item in tp:

# 元组类型

数据保护

如果不希望数据被程序所改变,转换成元组类型

>>>Is=["cat","dog","tiger",1024]

>>>It=tuple(Is)

>>>It

('cat','dog',tiger',1024)

6.3实例9:基本统计值计算

“基本统计值计算”问题分析

基本统计值

总个数:len()

求和:for...in

平均值:求和/总个数

反差:各数据与平均数差的平方的和的平均数

中位数:排序,然后... 奇数找之间1个,偶数找中间2个取平均

实例讲解

获得用户不定长度的输入:

#CalStatisticsV1.py

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.0

for num in numbers:

sdev = sdev + (num - mean)**2

return pow(sdev / (len(numbers)-1), 0.5)

计算中位数:

def median(numbers): #计算中位数

sorted(numbers) # sorted对列表进行排序

size = len(numbers)

if size % 2 == 0:

med = (numbers[size//2-1] + numbers[size//2])/2

else:

med = numbers[size//2]

return med

进行函数调用:

n=getNum()

m=mean()

print("平均值":{},方差:{:.2},中位数:{}.".format(m,dev(n,m),median(n)))

6.4 字典类型及操作

字典类型定义

理解“映射”

映射是一种键(索引)和值(数据)的对应

字典类型是“映射”的体现

键值对:键是数据索引的扩展

字典是键值对的集合,键值对之间无序

采用大括号{}和dict()创建,键值对用冒好:表示

举例:

df277f799ddf

字典类型定义和使用

"{}"是默认来生成字典类型的

字典处理函数及方法

函数或方法

描述

del d[k]

删除字典d中键k对应的数据值

k in d

判断键k是否在字典d中,如果在返回True,否则False

d.keys()

返回字典d中所有的键信息

d.values()

返回字典d中所有的值信息

d.items()

返回字典d中所有的键值对信息

df277f799ddf

字典类型操作

函数或方法

描述

d.get(k,)

键k存在,则返回相应值,不在则返回值

d.pop(k,)

键k存在,则取出相应值,不在则返回值

d.popitem()

随机从字典d中取出一个键值对,以元组形式返回

d.clear()

删除所有的键值对

len(d)

返回字典d中元素的个数

字典功能默写:

定义空字典d>>>d={}

向d新增2个键值对元素>>>d["a"]=1;d["b"]=2

修改第2个元素>>>d["b"]=3

判断字符“c”是否是d的键>>>"c" in d

计算d的长度>>>len(d)

清空d>>>d.clear()

字典类型应用场景

映射的表达

映射无处不在,键值对无处不在

例如:统计数据出现的次数,数据是键,次数是值

最主要作用:表达键值对数据,进而操作他们

元素遍历:

for k in d:

6.5模块5:jieba库的使用

jieba是优秀的中文分词第三方库

中文文本需要通过分词获得单个的词语

jieba是优秀的中文分词第三方库,需要额外安装

jieba库提供三种分词模式,最简单只需掌握一个函数

jieba分词依靠中文词库

利用一个中文词库,确定中文字符之间的关联概率

中文字符间概率大的组成词组,形成分词结果

除了分词,用户还可以添加自定义的词组

jieba分词的三种模式:精确模式、全模式、搜索引擎模式

精确模式:把文本精确的切分开,不存在冗余单词

全模式:把文本中所有可能的词语都扫描出来,有冗余

搜索引擎模式:在精确模式基础上,对长词再划分

函数

描述

jieba.lcut(s)

精确模式,返回一个列表类型的分词结果

jieba.lcut(s,cut_all=True)

全模式,返回一个列表类型的分词结果,存在冗余

jieba.lcut_for_search(s)

搜索引擎模式,返回一个列表类型的分词结果,存在冗余

jieba.add_word(w)

向分词词典增加新词w

6.6实例10:文本词频统计

英文文本:哈姆雷特(HAMLET)

中文文本:三国演义

Hamlet词频统计:

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

《三国演义》人物出场统计:

#CalThreeKingdomsV1.py

import jieba # 调用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)) # 打印输出

问题分析:

df277f799ddf

问题

进一步处理(人物出场统计):

关联相同概念的词频

#CalThreeKingdomsV2.py

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:

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 = items[i]

print ("{0:<10}{1:>5}".format(word, count))


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

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部