Python组合数据类型笔记--嵩天老师慕课版

集合类型及操作

集合类型定义

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

  • 集合元素之间无序,每个元素唯一,不存在相同元素;集合元素不可更改,不能是可变数据类型。

  • 若改变后与其他元素相同,则可能出现错误集合是多个元素的无序组合

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

  • 建立集合类型用 {} 或 set() - 建立空集合类型,必须使用set()

在这里插入图片描述

集合操作符

6个操作符

在这里插入图片描述
在这里插入图片描述

4个增强操作符

会修改原有的某一个集合
在这里插入图片描述

集合处理方法

在这里插入图片描述
S.pop是集合从某集合中取出某元素构成集合,并将此元素从原集合中删除。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这两个图举例 从A中不断地取出元素,当取空是异常然后退出!理解!

集合类型应用场景

最典型的应用场景 数据去重:集合类型所有元素无重复。(利用集合内元素无重复的特点)

还可以将集合转换为列表
在这里插入图片描述

序列类型及操作

序列类型定义

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

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

  • 类似数学元素序列: s0, s1, … , sn-1

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

  • 序列类型:字符串类型、元组类型、列表类型

序列处理函数及方法

6种操作符
在这里插入图片描述
在这里插入图片描述
5个函数和方法
在这里插入图片描述
在这里插入图片描述

元组类型及操作

元组(tuple)是关系数据库中的基本概念,关系是一张表,表中的每行(即数据库中的每条记录)就是一个元组,每列就是一个属性。 在二维表里,元组也称为行。

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

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

  • 可以使用或不使用小括号

  • 元组继承了序列的全部通用操作
    在这里插入图片描述

列表类型及操作

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

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

  • 列表中各元素类型可以不同,无长度限制
    在这里插入图片描述

列表类型操作函数和方法

在这里插入图片描述
在这里插入图片描述

列表的功能

在这里插入图片描述

It=[ ]
lt+=[1,2,3,4,5,6]
lt[2]=6
lt.insert(2,7)
del lt[1]
del lt[1:4]
0 in lt
lt.append(0)
lt.index(0)
len(it)
max(lt)
lt.clear()

序列类型应用场景

元素遍历

for item in ls:
<语句块>

元组遍历

for item in tp:
<语句块>

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

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

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

  • 元素遍历,或者数据保护(如果不希望数据被程序所改变,转换为元祖类型)

在这里插入图片描述

  • 序列是基类类型,扩展类型包括:字符串、元组和列表

  • 元组用()和tuple()创建,列表用[]和set()创建

  • 元组操作与序列操作基本相同

  • 列表操作在序列操作基础上,增加了更多的灵活性

基本统计值计算

给出不定个数的数据,求出平均值,方差,中位数

#CalStatisticsV1.py
def getNum():  #获取用户输入的不定长数字
    nums = []
    iNumber = input("请输入数字(回车退出)")
    while iNumber != "":
        nums.append(eval(iNumber))
        iNumber = input("请输入数字(回车退出):")
    return nums
 
def mean(numbers):  #计算平均值
    s = 0.0
    for item in numbers:
        s += item
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)#排序
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(n)
print("平均值是:{},方差:{:.2},中位数是{ }".format(m,dev(n,m),median(n)))

字典类型及操作

字典类型定义

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

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

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

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

表示{<键1>:<值1>, <键2>:<值2>, … , <键n>:<值n>}

在字典变量中,通过键获得值

<字典变量> = {<键1>:<值1>, … , <键n>:<值n>}
<值> = <字典变量>[<键>] [ ]
用来向字典变量中索引或增加元素 <字典变量>[<键>] = <值>

[ ]用来向字典变量中索引或增加元素

字典处理函数及方法

在这里插入图片描述
在这里插入图片描述

例子:
在这里插入图片描述
练习字典功能:
在这里插入图片描述

字典类型应用场景

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

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

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

元素遍历:

for k in d:
<语句块>

用键来索引具体的值,进而实现遍历

jieba库的使用

jieba是中文分词第三方库,需要额外安装 pip install jieba
jieba分词的三种模式

  • 精确模式:把文本精确的切分开,不存在冗余单词.(最常用

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

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

jieba库常用函数.
在这里插入图片描述
在这里插入图片描述

文本词频统计

例1:

  • 英文文本:Hamet 分析词频

https://python123.io/resources/pye/hamlet.txt

#CalHamletV1
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("{:<10}{1:>5}".format(word,count))

例2:

  • 中文文本:《三国演义》分析人物

https://python123.io/resources/pye/threekingdoms.txt

#CalThreeKingdomsV1
import jieba
txt = open("ThreeKingdoms.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(15):
    word, count = items[i]
    print("{:<10}{:>5}".format(word,count))

元组和列表的区别

列表和元组是Python中最常用的两种数据结构,字典是第三种。 相同点:

都是序列
都可以存储任何数据类型
可以通过索引访问

语法差异
使用方括号[]创建列表,而使用括号()创建元组。 请看以下示例:

在这里插入图片描述
是否可变
列表是可变的,而元组是不可变的,这标志着两者之间的关键差异。

我们可以修改列表的值,但是不修改元组的值。

由于列表是可变的,我们不能将列表用作字典中的key。 但可以使用元组作为字典key。

在这里插入图片描述

重用与拷贝
元组无法复制。 原因是元组是不可变的。 如果运行tuple(tuple_name)将返回自己。

在这里插入图片描述

大小差异
Python将低开销的较大的块分配给元组,因为它们是不可变的。 对于列表则分配小内存块。 与列表相比,元组的内存更小。 当你拥有大量元素时,元组比列表快。列表的长度是可变的。

在这里插入图片描述

同构与异构
习惯上元组多用于用于存储异构元素,异构元素即不同数据类型的元素,比如(ip,port)。 另一方面,列表用于存储异构元素,这些元素属于相同类型的元素,比如[int1,in2,in3]。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值