1.4.原组
1.4.1.元组(tuple):将一组不可变的数据序列组合起来形成一个特殊的内置容器
1.4.2元组不允许的操作:
-
修改,新增元素
-
删除元素(允许删除整个元组)
-
所有会对元组内部元素发生变化的方法无法使用(remove,append,pop等)
1.4.3.元组的操作
-
创建格式:tuplename=(element1,element2,element3,.....elementn),元组元素个数数限制,类型都可以不相同
nume1=(2,3,4,5,6)
num2=(1,) #一个元素的元组,逗号不能省略
num3=(1) #不是元组,只是赋值1
num4=() #空元祖
num5=tuple(range(0,20,2)) #使用tuple()函数创建元组
str1=('china','hello','andy')
str2=(82,'python',[1,2,3,4,5])
str3='python','你好','人生苦短,我用python' #圆括号可以省略
-
删除元组:del tuplename
tup1=(12,34,56)
tup2=('abc','xyz')
#tup1[0]=100 #报错了
tup1=(9,8,7,6) #支持整体处理
tup3=tup1+tup2
print(tup3)
del tup1
del tup2
#注意元组为不可变序列,不支持单个元素删除,但可以整体赋值修改
tup1=('a','b',['A','B'])
tup1[2][0]='x'
tup1[2][1]='y'
print(tup1)
#注意:元组只保证一级子元素不可变,对于内部嵌套的元组不保证
-
元组连接时必须维持元组性质,不能连接字符串或列表等
tup1=(1,2,3)
list1=[4,5,6]
tup2=tup1+list1 #报错
tup2=tup1+'china' #报错
-
元组连接的对象只有一个元素时,必须加逗号
tup1=(1,2,3)
tup2=tup1+(4,) #加逗号
print(tup2)
-
元组的读取问题:定义时使用(),若要读取访问元组内容依然和列表一样使用 [ ] 配合索引实现
num1=(1,2,3,4,5)
str1=('apple','orange')
print(num1[0],str1[1])
-
元组也支持切片:与列表操作方式相同
import random
tup1=tuple(random.sample(range(0,30),10))
print(tup1)
print(tup1[1:3])
print(tup1[:4])
print(tup1[5:])
print(tup1[-2:])
print(tup1[-3:3:-1])
print(tup1[0:5:3])
-
元组与列表的数据互换
-
list():转为列表
-
tuple():转为元组
-
tup1=(123,'hello','999',35.6)
list1=list(tup1)
list1.append('china')
print(list1)
tup1=tuple(list)
print(tup1)
1.4.4.元组与列表的区别
-
元组与列表都属于序列,都可以按照特定的顺序存储一组数据,类型个数不受限制
-
区别:
-
列表为可变序列,元素可以随时修改增删,元组不可变序列,元素内容不可修改,删除,除非整体替代
-
元组不支持append(),extend(),insert()等方法
-
元组和列表仅能通过切片进行访问
-
元组比列表结构简单,占用资源少,程序运行速度快
-
元组比列表安全
-
1.5.字典
1.5.1.概念:字典属于可变序列,使用‘键:值’(key-value)的方式配对存储数据,类似于新华字典中拼音-汉字的关系
1.5.2.格式:dictname={key1:value1,key2:value,........,keyn:valuen}
-
distname:字典名
-
key:元素的键
-
value:元素的值,可以为任意数据,不需要唯一
1.5.3.字典创建示例
dict1={'andy':1001,'fox':1002,'alice':1003}
dict2={}
dict3=dict() #使用dict方法创建空字典
name=['春香','夏柠','秋兰','翠花']
sign=['天秤座','射手座','双鱼座','金牛座']
#使用zip()函数将列表或元组对应的元素组合成字典
dict4=dict(zip(name,sign))
#键=值得方式创建
dict5=dict(a=98.5,b=77.4,c=87.2,d=64.9)
print(dict1,'\n',dict2,'\n',dict3,'\n',dict4,'\n',dict5,'\n')
1.5.4.增加字典元素
-
格式:dictname[键]=值
-
例:
dict1={'西瓜':5,'香蕉':8,'荔枝':10}
dict1['橘子']=6
dict1['荔枝']=12
print(dict1)
1.5.5.删除字典
-
del 字典名[键]:删除字典中特定元素
-
dictname.claer():清空字典全部元素
-
del 字典名:删除字典整体、
dict1={'西瓜':5,'香蕉':8,'荔枝':10}
del dict1['西瓜']
dict1.clear()
print(dict1)
del dict1
1.5.6.字典的访问:dictname[键]
dict1={'西瓜':5,'香蕉':8,'荔枝':10}
print(dict1['香蕉'],dict1['荔枝'])
1.5.7.字典的复制
-
作用:用来保护原字典内容
-
格式:new_dictname=dictname.copy()
-
注意:默认为深拷贝
dict1={'西瓜':5,'香蕉':8,'荔枝':10}
dict2=dict1.copy()
print(dict1,'\n',dict2)
print(id(dict1),id(dict2))
1.5.8.使用get()方法获取指定的键值
-
格式:dictname.get(key,default)
-
key:指定的键
-
default:用于指定键不存在时,返回的默认值,若省略则返回None
dict1={"Name":'andy',"Age":17,"Class":'First'}
print(dict1.get('Age'))
print(dict1.get('Score'))
print(dict1.get('Score',98.5))
#若访问的键不存在则执行default
1.5.9.字典的遍历
-
格式1:遍历值,items()方式
for i in dictname.item():
-
格式2:键:值遍历
for key,value in dictname.items()
处理key和value
name=['春香','夏柠','秋兰','翠花']
sign=['天秤座','射手座','双鱼座','金牛座']
dict1=dict(zip(name,sign))
for i in dict1.items():
print(i)
for i,j in dict1.items():
print(i,'的星座是:',j)
-
格式3:遍历字典的键,keys()
for key in dictname.keys():
处理
players={'张三':77.8,'李四':55.9,'王五':87.6}
for name in players.keys():
print('姓名:',name)
-
注意1:不允许同一个键出现两次,创建时如果同一个被赋值2次,后一个会被记住
dict1={'num':1001,'score':98,'num':1002}
print(dict1)
-
注意2:键必须不可变,所以使用数字,字符串,元组来充当,列表不行
dict1={['num']:1001,'score':98,'num':1002}
print(dict1)
1.5.10.字典内含列表
-
列表存在字典中,一般作为字典的某个键的值出现,需要使用循环完成处理,外层循环用于取得字典的键,内层循环用于取得值或将列表拆分
sports={'andy':['篮球','足球','橄榄球'],'jenny':['体操','游泳'],'fox':['羽毛球','乒乓球','骑行']}
for name,na_sport in sports.items():
print("%s喜欢的运动是:"%name,end=' ')
for sp in na_sport:
print(" ",sp,end=" ")
print()
1.5.11.字典内含字典
-
字典存储在字典一般用于表示字典中键的值
wechat={'001':{'last_name':'张三','first_name':'张三丰','city':'西安'},
'002':{'last_name':'张四','first_name':'李时珍','city':'咸阳'} }
for num,name in wechat.items():
print('账户:',num,end=" ")
print('姓名:',name['first_name'],end=' ')
print('住址:',name['city'])
1.6.集合:
1.6.1.概念:集合是一个无序不重复的序列
1.6.2.作用:用于关系测试和消除重复值
1.6.3.集合使用大括号{}框定原素,使用逗号分隔
1.6.4.格式:setname={value1,value2,value3,value4,.....valuen}
set1={1,2,3,4,5}
set2={'name','num','age','score'} #集合本质为无序可变序列,输出时顺序可能不同
set3=('命运给与我们的不是失望之酒,而是机会之杯')
set4=set([1,2,3,4,5.6])
set5=set() #空集合,不能为{}
set6=set('apple',) #必须增加逗号
print(set1,'\n',set2,'\n',set3,'\n',set4,'\n',set5,'\n',set6,'\n')
1.6.5.集合应用的核心:去重
list1=[1,2,3,2,3,4,5,6,5,4,3,4,5,6,7,8,6,4,4,46,3,3]
x=set(list1)
print(x)
1.6.6.集合添加与删除
-
添加元素:setname.add(elsment)
set1=set(['java','c','go','c#'])
set1.add('python')
print(set1)
删除元素:setname.remove
1.6.7集合的交,并,差集运算
-
交集:&
-
并集
-
差集:-
-
对称差集:^
-
例:
set1=set('abcdefg')
set2=set('efghijk')
print(set1 & set2)
print(set1 | set2)
print(set1 - set2)
print(set1 ^ set2)
1.6.8集合判断是否相等
-
符号:== !=
-
返回值:Ture False
A={1,2,3,4}
B={3,4,5,6}
C={1,2,3,4}
print(A==B,A==C)
1.6.9.特殊操作
-
sidisjoint():两个集合没有共同元素时返回True
A={1,2,3,4}
B={5,6,7,8}
print(A.isdisjoint(B))
-
issubset()测试是否为子集:
A={1,2,3,4}
B={1,2,3,4,5,6,7,8}
print(A.issubset(B))
-
issuperset():测试是否为父集