组合数据类型
组合数据: 从一个数据到一组数据,表达一个含义或多个含义
集合、序列(元组、列表)、字典
集合是多个元素的无序组合
集合:无序、唯一、不可变
- 集合类型与数学中的集合概念一致
- 集合元素之间无序,每个元素唯一,不存在相同元素
- 集合元素不可更改,不能是可变数据类型
集合的表示与创建
- 集合用大括号 {} 表示,元素间用逗号分隔
- 建立集合类型用 {} 或 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}
集合操作符:交(&)、并(|)、差(-)、补(^)、比较(>=<)
- 6个基本操作符
- 4个增强操作符
8个集合处理函数
集合经典应用场景:数据去重
- 包含关系比较
>>> "p" in {"p","y" , 123}
True
>>> {"p","y"} >= {"p","y" , 123}
False
- 数据去重:集合类型所有元素无重复
>>> ls = ["p","p","y","y", 123]
>>> s = set(ls) # 利用了集合无重复元素的特点
{'p', 'y', 123}
>>> lt = list(s) # 还可以将集合转换为列表
['p', 'y', 123]
序列
序列类型定义:
序列是具有先后关系的一组元素
- 序列是一维元素向量,元素类型可以不同
- 类似数学元素序列: s0, s1, … , sn-1
- 元素间由序号引导,通过下标访问序列的特定元素
序列是一个基类类型
序列处理函数及方法
6个操作符
5个函数
元组类型及操作
元组是序列类型的一种扩展
- 元组是一种序列类型,一旦创建就不能被修改
- 使用小括号 () 或 tuple() 创建,元素间用逗号 , 分隔
- 可以使用或不使用小括号
>>> creature = "cat","dog","tiger","human"
>>> creature
('cat', 'dog', 'tiger', 'human')
>>> color = (0x001100, "blue", creature)
>>> color
(4352, 'blue', ('cat', 'dog', 'tiger', 'human'))
元组继承序列类型的全部通用操作
- 元组继承了序列类型的全部通用操作
- 元组因为创建后不能修改,因此没有特殊操作
- 使用或不使用小括号
列表类型及操作
列表是序列类型的一种扩展,十分常用
- 列表是一种序列类型,创建后可以随意被修改
- 使用方括号 [] 或list() 创建,元素间用逗号 , 分隔
- 列表中各元素类型可以不同,无长度限制
列表类型操作函数
6个基本操作符
7个函数
定义空列表lt
向lt新增5个元素
修改lt中第2个元素
向lt中第2个位置增加一个元素
从lt中第1个位置删除一个元素
删除lt中第1-3位置元素
判断lt中是否包含数字0
向lt新增数字0
返回数字0所在lt中的索引
lt的长度
lt中最大元素
清空lt
>>> lt = []
>>> lt += [1,2,3,4,5]
>>> lt[2] = 6
>>> lt.insert(2, 7)
>>> del lt[1]
>>> del lt[1:4]
>>> 0 in lt
>>> lt.append(0)
>>> lt.index(0)
>>> len(lt)
>>> max(lt)
>>> lt.clear()
序列类型应用场景
数据表示:元组、列表
- 元组用于元素不改变的应用场景,更多用于固定搭配场景
- 列表更加灵活,它是最常用的序列类型
- 最主要作用:表示一组有序数据,进而操作它们
元素遍历
for item in ls :
<语句块>
for item in tp :
<语句块>
数据保护
- 如果不希望数据被程序所改变,转换成元组类型
>>> ls = ["cat","dog","tiger", 1024]
>>> lt = tuple(ls)
>>> lt
('cat', 'dog', 'tiger', 1024)
基本统计值计算
问题:给出一组数,对他们有个概要理解
总个数、求和、平均数、方差、中位数……
基本统计值分析
- 总个数:len()
- 求和:for … in
- 平均值:求和/总个数
- 方差:
各数据与平均数差的平方和的平均数 - 中位数:排序,然后…
奇数找中间1个,偶数找中间2个取平均
# CalStatistic.py
# coding=gbk
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 += (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("平均值:{},方差:{},中位数:{}".format(m,dev(n,m),median(n)))
举一反三
技术能力扩展
- 获取多个数据:从控制台获取多个不确定数据的方法
- 分隔多个函数:模块化设计方法
- 充分利用函数:充分利用Python提供的内置函数