2016年2月16日星期一
组合数据类型包括:集合类型、序列类型和字典类型
集合类型及操作
集合类型定义
集合是多个元素的无序组合
—集合用大括号{}表示,元素之间用逗号分隔
—建立集合类型用{}或set()
—建立空集合类型,必须使用set()
集合操作符上面四种操作符分别实现了并、减、交、补运算,与赋值符组合组成增强操作符,更新集合S
集合处理方法
S.add(x):如果x不在集合S中,将x增加到S
S.discard(x):移除S中元素x,如果x不在集合中,不报错
S.remove(x):移除S中元素x,如果x不在集合中,产生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转变为集合类型
由于集合元素是没有顺序的,所以用for in去返回获得的元素是不确定的
除了用for in 我们也可以用while去遍历整个集合
这段代码的意思是,不断取出A集合中的元素,直到A为空集合的时候,A.pop()将会产生一次异常,这个异常可以被try except捕捉到,程序可以正常退出
集合类型应用场景
利用集合类型我们可以判断一个元素是否在一个集合中,也可以判断集合间的包含关系,集合类型还有一个典型的应用场景是利用集合间不存在相同元素的性质进行数据去重操作
序列类型及操作
序列类型定义
序列是具有先后关系的一组元素
—序列是一维元素向量,元素类型可以不同
—元素间由序号引导,通过下标访问序列的特定元素
序列是一个基类类型,我们一般不直接使用序列,而是使用序列类型衍生出来的字符串类型、元组类型、列表类型
在序列类型中元素存在正向递增的序号索引关系和反向递减的索引关系
序列处理函数及方法
6个操作符
len(s) 返回序列s的长度
min(s)返回序列s的最小元素,s中元素需要可比较
max(s)返回序列s的最大元素,s中元素需要可比较
如果元素不是同一类型,不能比较,将报错
s.index(x)或s.index(s,i,j)返回序列s从开始到位置中第一次出现元素x的位置
s.count(x)返回序列中出现x的总次数
对于字符串来说每个元素都是字符,字符大小的比较是按照字母序来比较
元组类型定义
元组是序列类型的一种扩展
—元组是一种序列类型,一旦创建就不能被修改
—使用小括号()或tuple()创建,元素间用逗号,分隔
—可以使用或不使用小括号
—元组继承了序列类型的全部通用操作
—元组因为创建后不能修改,因此没有特殊操作
— 使用或不使用小括号
在使用creature[::-1]进行切片的时候,它并不改变原有creature变量的值
color[-1]会索引到creature这个元素上,由于creature又是一个元组类型,它还可以继续使用[2]来进一步索引它的第二个元素,返回的是tiger
列表类型及操作
列表是序列类型的一种扩展,十分常用
—列表是一种序列类型,创建后可以随意被修改
—使用[]或list()创建,元素之间用逗号,分隔
—列表中各元素类型可以不同,无长度限制如果仅仅通过“=”将一个列表变量赋值给另外一个列表变量,此时并没有在系统中真正的生成一个列表,而是将同一个列表赋给了不同的名字
ls.append(x):在列表ls最后增加一个元素x
ls.clear():删除列表ls中所有元素
ls.copy():生成一个新列表,赋值ls中所有元素
is.insert(i,x):在列表ls的第i个位置增加元素x
is.pop(i):将列表ls中第i位置元素取出并删除该元素
ls.remove(x):将列表ls中出现的第一个元素x删除
ls.reverse():将列表ls中的元素反转
练习:
1、定义空列表It
lt=[ ]
2、向It新增5个元素
lt +=[1,2,3,4,5]
3、修改lt中第2个元素
lt[2]=6
4、向lt中第2个位置增加一个元素
lt.inserter(2,7)
5、从lt中第1个位置删除一个元素
del lt[1]
6、删除lt中第1-3个位置元素
del lt[1:4]
7、判断lt中是否包含数字0
0 in lt
8、向lt新增数字0
lt.append(0)
9、返回数字0所在lt中的索引
lt.index(0)
10、lt的长度
len(lt)
11、lt中最大元素
max(lt)
12、清空lt
lt.clear()
序列类型应用场景
—元组用于元素不改变的应用场景,更多用于固定搭配场景,如函数的返回值return
—列表则更加灵活,它是常用的序列类型
—最主要作用(数据表示):用元组或列表这样的数据类型来表达一组有序数据,通过这样的类型表达了有序数据,进而操作他们,例如:
用for item in ls:
<语句块>
遍历列表ls元素
用for item in tp:
<语句块>
遍历元组tp元素
—其他作用(数据保护): 如果不希望数据被程序所改变,转换成元组类型,例如:
通过tuple函数将列表转换成元组类型,这样后续的程序无论对它怎么操作,都不会改变它的数据值
基本统计值计算实例
代码:
#CalStatisticV1.py
def getNum():#获取用户不定长度的输入
nums=[]#创建一个空列表
Numstr=input(“请输入数字(回车退出)”)#获取一个字符串数字输入
while Numstr!=" ":#如果输入的字符串不为空
nums.append(eval(Numstr))#转化为数字添加到列表中
Numstr=input(“请输入数字(回车退出)”) #继续获得一个字符串数字输入
return nums#返回用户输入列表
def mean(numbers):#计算平均值
s=0.0
for num in numbers:
s=s+num
return s/len(numbers)
def dev(mean,numbers):#计算方差
sdev=0.0
for num in numbers:
sdev=sdev+(num-mean)**2
return pow(sdev/(len(numbers)-1),0.5)
def medium(numbers):#计算中位数
sorted(numbers)
num=len(numbers)
if num%2==0:
med=(numbers[num//2-1]+numbers[num]//2)/2
else:
med=numbers[num//2]
return med
n=getNum()
m=mean(n)
dev=dev(m,n)
med=medium(n)
print(“平均值为{},方差为{:.2f},中位数为{}”.format(m,dev,med))
结果: