组合数据类型

6.1集合类型及操作

6.1.1集合类型定义

  1. 集合是多个元素的无序组合
    ——集合类型与数学中集合概念一致
    ——集合元素之间无序,每个元素唯一,不存在相同元素
    ——集合元素不可更改,不能是可变数据类型
    集合用{}表示,元素间用逗号隔开
    建立集合类型用{}或set()
    建立空集合类型时,必须用set()
  2. A = {"Python",123,("python", 123)} #使用{}建立集合 B=set("pypy123")

6.1.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的包含关系

Python提供了4个增强操作符

操作符及其应用描述
S竖线=T更新集合S,包括在S和T中的所有元素
S- = T更新集合S,包括在集合S但不在T中的元素
S & = T更新集合S,包括同时在集合S和T中的元素
S^=T更新集合S,包括集合S和T中的非相同元素,即补运算之后的结果返回原有集合

6.1.3集合处理方法

操作函数或方法描述
S.add(x)x不在集合中,将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在集合中,返回True,否则返回False
x not in S判断S中元素x,x不在集合S中,返回True,否则返回False
set(x)将其他类型变量x转变为集合类型
A = {"p", "y", 123}
for item in A:       #for in 遍历集合中的元素
	pritn(item, end="")


try:
	while True:              #从A中不断取出元素,A中无元素时,程序正常退出
		print(A.pop(), end="")
except:
	pass

6.1.4集合应用场景

  1. 包含关系的比较
"p" in {"p", "y", 123}   #结果为True

{"p","y"} >= {"p", "y", 123} #结果为False
  1. 数据去重:集合所有元素无重复 ——集合最重要的特点
ls = ["p", "p", "y", "y", 123]  
s = set(ls)        #利用了集合无重复元素的特点
#结果为 {'p','y',123}
lt = list(s)  #将集合转换为列表
#['p', 'y', 123]

6.2序列类型及操作

6.2.1序列类型的定义

  1. 序列是具有先后关系的一组元素
    ——序列是一维元素向量,元素类型可不同
    ——类似数学元素序列:S0,S1,…, Sn-1
    ——元素间由序号引导,通过下标访问序列的特定元素
  2. 序列是一个基类类型
    序列类型衍生——字符串类型,元组类型,列表类型。序号分为正向递增序号,反向递减序号。

6.2.2序列处理函数及方法

  1. 序列类型操作实例
ls = ["python", 123, ".io"]
ls[::-1]  #切片操作,返回列表中所有元素,将列表元素取反
函数和方法描述
len(s)返回序列s中的长度
s.index(x)或s.index(x,i,j)返回序列s从i开始到j位置中第一次出现元素x的位置
s.count(x)返回序列s中出现x的总次数

6.2.3元组类型及操作

  1. 元组是序列类型的一种扩展
    ——元组是一种数列类型,一旦创建就不能被修改
    ——使用()小括号或tuple()创建,元素间用逗号,分隔
    ——可以使用或不使用小括号
def func():
	return 1,2     #Python内部函数返回了一个值,元组类型

creature = "cat", "dog", "tiger", "human"
creature     #内部显示的creature
('cat','dog','tiger','human')
color = (0x001100, "blue", creature)
color
(4352,'blue',('cat','dog','tiger','human'))

  1. 元组继承序列类型的全部通用操作
    ——元组继承序列类型的全部通用操作
    ——元组因为创建后不能修改,因此没有特殊操作
    ——使用或不使用小括号
    例如creature[::-1] #对元组类型进行提取,提取后是产生了新的元组,并不改变原有的creature值 color[-1][2] #color[-1]索引到creature元素上,creature元素是个元组类型的元素,因此[2]继续索引,索引的值为tiger

6.2.4列表类型及操作

  1. 列表是序列类型的一种扩展,十分常用
    ——列表是一种序列类型,创建后可以随意被修改
    ——使用[]方括号或list()创建,元素间用逗号,分隔
    ——列表中各元素类型可以不同,无长度限制
ls = ["cat","dog","tiger",1024]
lt = ls  #注意:此时系统中并没有真正生成列表,而是将同一个列表赋给不同的名字,ls,lt都指向同一个列表。只有使用[]创建时才是真正创建了列表
  1. 列表类型的操作函数和方法
函数或方法描述
ls[i] = x替换列表ls第i元素为x
ls[i:j:k] = lt用列表lt替换ls切片后所对应元素子列表
del ls[i]删除列表ls中第i元素
del ls[i:j:k]删除列表ls中第i到第j以k为步长的元素
ls += lt更新列表ls,将列表lt元素增加到列表ls中
ls *= n更新列表ls,其元素重复n次
ls = ["cat","dog", "tiger", 1024]
ls[1:2] = [1, 2, 3, 4]  #ls[1:2]的切片为dog结果为['cat',1,2,3,4,'tiger',1024]

del ls[::3] #删除整个列表中以3为步长的列表子序列。 结果为[1,2,4,'tiger']

ls * 2 #对列表进行复制 结果为[1,2,4,'tiger',1,2,4,'tiger']
函数或方法描述
ls.insert(i,x)在列表ls中第i个位置增加x
  1. 常用基本操作
    ——定义空列表:lt = [ ]
    ——向lt新增5个元素:lt += [1,2,3,4,5]
    ——修改lt中第2个元素:lt[2] = 6
    ——向lt中第2个位置增加一个元素: lt.insert(2,7)
    ——向lt中第1个位置删除一个元素:del lt[1]
    ——删除lt中第1—3位置元素包含3:del lt[1:4]
    ——判断lt是否包含数字0:0 in lt
    ——向lt新增数字0:lt.append(0)
    ——返回数字0所在lt中的索引:lt.index(0)
    ——lt的长度:len(lt)
    ——lt中最大元素:max(lt)
    ——清空lt:lt.clear()

6.2.5序列类型的应用场景

  1. 最重要场景——数据表示
    ——元组用于元素不改变的应用场景,更多用于固定搭配场景
    ——列表更灵活,它是最常用的序列类型
    ——最主要作用:表示一组有序数据,进而操作它们
for item in ls:
	<语句块>

for item in tp:
	<语句块>
  1. 数据保护
    ——如果不希望数据被程序所改变,转换成元组类型

6.3实例:基本统计值计算

  1. 总个数、求和、平均值、方差、中位数…
    ——总个数:len()
    ——求和:for…in
    ——平均值:求和/总个数
    ——方差:各数据与平均数差的平方的和的平均数
    ——中位数:排序,然后…奇数找最中间,偶数为最中间两个数的平均值
#数据输入
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): #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函数对列表进行排序,排序之后取列表中间元素进行排序
	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("平均值:{},方差:{:.2f},中位数:{}".format(m, dev(n,m),median(n)))
  1. 技术能力扩展
    ——获取多个数据:从控制台获取多个不确定数据的方法
    ——分隔多个函数:模块化设计方法
    ——充分利用函数:充分利用Python提供的函数
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值