元组:元组就是一个不可变的列表
1.用途:当我们需要记录多个同种属性的值,并且只有读的需求时,应该用元组
2.定义方法:在()内用逗号分隔开多个任意类型的元素
t=('tulipa',)#注意:当元组内只有一个元素时,必须加逗 t=tuple(('tulipa',)) t=('tulipa',) print(t,type(t)) print(t[0])('tulipa',) #<class 'tuple'> #—>tulipa #数据类型转换: t=tuple('hello') print(t,type(t)) #('h', 'e', 'l', 'l', 'o') <class 'tuple'>
3.常用操作+内置的方法
3.1优先掌握的操作:
1.按索引取值(正向取+反向取):只能读
t=('a','b','c')
t[0]='A'
#报错不能改值
2.切片(顾头不顾尾,步长)
t=('a','b','c') print(t[0:2]) #('a', 'b')
3.长度
t=tuple('hello') print(len(t)) #5
4.成员运算in和not in
t=('a','b','c',(1,2,3)) print((1,2,3) in t) #True
5.循环
t=('a','b','c',(1,2,3)) for item in t: print(item) #a #b #c #(1, 2, 3)
3.2需要掌握的操作
t=('a','b','b','c',(1,2,3)) print(t.count('b')) print(t.index('b',2,4)) #2 #2
总结
存多个值
有序
不可变(1、可变:值变,id不变。可变==不可hash 2、不可变:值变,id就变。不可变==可hash)
t=(1,'a',['m','n']) print(id(t[0]),id(t[1]),id(t[2])) t[2][0]='M' print(t) print(id(t[0]),id(t[1]),id(t[2])) #1675259360 2194535694664 2194536741640 #(1, 'a', ['M', 'n']) #1675259360 2194535694664 2194536741640
字典类型
1.用途:记录多个不同属性的值
2.定义方式:在{}内用逗号分隔开多个元素,每一个元素都是key;value的形式,其中value可以是任意类型,而key必须是不可变类型(通常应该是str类型)
3.常用操作+内置的方法
3.1优先掌握的操作:
1.按key存取值:可存可取
dic={'name': 'egon', 'age': 18, 'gender': 'male'} print(dic['name']) print(id(dic) )dic['name']='EGON' print(dic,id(dic)) dic['height']=1.81 # 如果key不存在则新增一组key:value print(dic) #egon #2933877980904 #{'name': 'EGON', 'age': 18, 'gender': 'male'} 2933877980904 #{'name': 'EGON', 'age': 18, 'gender': 'male', 'height': 1.81}
2.长度
dic={'name': 'egon', 'age': 18, 'gender': 'male'} print(len(dic)) #3
3.成员运算in和not#判断是字典的key
dic={'name': 'egon', 'age': 18, 'gender': 'male'} print('name' in dic) #True
4.删除
dic={'name': 'egon', 'age': 18, 'gender': 'male'} del dic['name'] print(dic) #{'age': 18, 'gender': 'male'} t=dic.popitem() print(t,type(t)) #('gender', 'male') <class 'tuple'> v=dic.pop('name') print(v) #报错
5.键key(),值values(),键值对items()
dic={'name': 'egon', 'age': 18, 'gender': 'male'} # Python2解释器 # >>> dic={'name': 'egon', 'age': 18, 'gender': 'male'} # >>> dic.keys() # ['gender', 'age', 'name'] # >>> dic.values() # ['male', 18, 'egon'] # >>> dic.items() # [('gender', 'male'), ('age', 18), ('name', 'egon')] keys=dic.keys() vals=dic.values() items=dic.items() print(keys) print(vals) print(items) print(list(keys)) print(list(vals)) print(list(items)) #dict_keys(['name', 'age', 'gender']) #dict_values(['egon', 18, 'male']) #dict_items([('name', 'egon'), ('age', 18), ('gender', 'male')]) #['name', 'age', 'gender'] #['egon', 18, 'male'] #[('name', 'egon'), ('age', 18), ('gender', 'male')]
6.循环
dic={'name': 'egon', 'age': 18, 'gender': 'male'} for k in dic.keys(): print(k) #name #age #gender for k in dic: print(k) #name #age #gender for v in dic.values(): print(v) #egon #18 #male for k,v in dic.items(): print(k,v) #name egon #age 18 #gender male
7.get取值
dic={'name': 'egon', 'age': 18, 'gender': 'male'} if 'xxx' in dic: print(dic['xxx']) else: print(None) v=dic.get('xxx') print(v) #None #None
3.2需要掌握的操作
dic.fromkeys() li=['name','age','gender'] dic={} for k in li: dic[k]=None print(dic) #{'name': None, 'age': None, 'gender': None} dic={}.fromkeys(li,None) print(dic) #{'name': None, 'age': None, 'gender': None} dic={'k1':1}.fromkeys(li,None) print(dic) #{'name': None, 'age': None, 'gender': None} dic={}.fromkeys('hello',) print(dic) #{'h': None, 'e': None, 'l': None, 'o': None} keys=['name','age','gender'] vals=['egon',18,'male'] dic={}.fromkeys(keys,vals) print(dic) #{'name': ['egon', 18, 'male'], 'age': ['egon', 18, 'male'], 'gender': ['egon', 18, 'male']} keys=['name','age','gender'] vals=['egon',18,'male'] dic={} for i in range(len(keys)): k=keys[i] v=vals[i] dic[k]=v print(dic) #{'name': 'egon', 'age': 18, 'gender': 'male'} dic={} dic.update() old_dic={'name': 'egon', 'age': 18, 'gender': 'male'} new_dic={'x':1,'name':'EGON'} old_dic.update(new_dic) print(old_dic) #{'name': 'EGON', 'age': 18, 'gender': 'male', 'x': 1} dic.setdefault(k,v)#:执行完毕后是为了保证字典中必须有这么一个k dic={'name': 'egon', 'age': 18, 'gender': 'male'} v=dic.setdefault('height',1.81) # 字典中没有'height'这个键,则新增 print(dic) #{'name': 'egon', 'age': 18, 'gender': 'male', 'height': 1.81} print(v) #1.81 v=dic.setdefault('name','EGON') # 字典中有'name'这个键,不修改字典 # print(dic) print(v) #egon #setdefault的原理分析: k='name' v='EGON' if k not in dic: dic[k]=v print(dic) #{'name': 'egon', 'age': 18, 'gender': 'male'}
总结
存多个值
无序
可变(1、可变:值变,id不变。可变==不可hash 2、不可变:值变,id就变。不可变==可hash)
一:引入
pythons=['李铁蛋','张全蛋','王铜蛋','赵银蛋','oldboy','艾利克斯'] linuxs=['kevin','egon','tank','艾利克斯','王铜蛋'] l=[] for item in pythons: if item in linuxs: l.append(item)print(l) #['王铜蛋', '艾利克斯']
二:集合set
1.用途
1.1做关系运算
1.2去重
2.定义方式:在{}内用逗号分隔开多个元素,多个元素必须满足以下条件
2.1每一个元素必须是不可变类型
2.2集合内元素不能重复
2.3集合无序
s={1,1.1,'aaa',1,1,1,1,1,1,1,1,1,} print(s,type(s)) #{1, 'aaa', 1.1} <class 'set'>
注意点:
d={} # 默认定义为字典 print(type(d)) s=set() print(s,type(s)) #<class 'dict'> #set() <class 'set'> #数据类型转换:s=set('hello') print(s)#{'h', 'e', 'o', 'l'}
3.常用操作+内置的方法
3.1关系运算
pythons={'李铁蛋','张全蛋','王铜蛋','赵银蛋','oldboy','艾利克斯'} linuxs={'kevin','egon','tank','艾利克斯','王铜蛋'} # 求即报名python课时又报名linux课程的学员:交集 #求所有的学员姓名:并集 res=pythons | linuxs print(res) #{'张全蛋', 'tank', '李铁蛋', 'oldboy', '赵银蛋', 'egon', '艾利克斯', 'kevin', '王铜蛋'} res1=pythons.union(linuxs) print(res1) #{'张全蛋', 'tank', '李铁蛋', 'oldboy', '赵银蛋', 'egon', '艾利克斯', 'kevin', '王铜蛋'} #求只报名python课程的学员:差集 res=pythons - linuxs print(res) #{'赵银蛋', '李铁蛋', 'oldboy', '张全蛋'} print(pythons.difference(linuxs)) #{'赵银蛋', '李铁蛋', 'oldboy', '张全蛋'} res=linuxs - pythons print(res) #{'tank', 'egon', 'kevin'} #求没有同时报名两门课程的学员:对称差集 res=(pythons - linuxs) | (linuxs - pythons) res=pythons ^ linuxs print(res) #{'tank', '李铁蛋', 'oldboy', '赵银蛋', 'egon', '张全蛋', 'kevin'} print(pythons.symmetric_difference(linuxs)) #{'tank', '李铁蛋', 'oldboy', '赵银蛋', 'egon', '张全蛋', 'kevin'}
父集/子集: 包含与被包含关系
s1={1,2,3} s2={3,1,2} print(s1 == s2) #True s1={1,2,3} s2={1,2} print(s1 >= s2) #True print(s1.issuperset(s2)) #True print(s2 <= s1) #True print(s2.issubset(s1)) #True #长度len #成员运算in和not #掌握的操作 s1={'a','b','cc',2,3} print(id(s1)) #2096922059944 s1.update({3,4,5}) print(s1,id(s1)) #{2, 3, 4, 5, 'cc', 'b', 'a'} 2096922059944 s1.add(4) print(s1) #{'a', 2, 3, 4, 'cc', 'b'} res=s1.pop() print(res) #随机 res=s1.remove('b') print(s1) #{2, 3, 'cc', 'a'} print(res) #None s1={1,2,3} s2={3,4,5} s1.difference_update(s2) # s1=s1-s2 print(s1) #{1, 2} s1.intersection_update(s2) # s1=s1 & s2 print(s1) #{3} s1.symmetric_difference_update(s2) # s1=s1 ^ s2 print(s1) #{4, 5} s1={1,2,3} # s1.remove(4) # s1.discard(4) # res=s1.discard(3) # print(res) # None s1={1,2,3} s2={4,5,6} print(s1.isdisjoint(s2)) #True
总结
存多个值
无序
set可变(1、可变:值变,id不变。可变==不可hash 2、不可变:值变,id就变。不可变==可hash)
去重
names=['egon','egon','kevin','kevin','alex','alex'] l=[] for name in names: if name not in l: l.append(name) print(l) #['egon', 'kevin', 'alex'] #如果去重的对象都是不可变类型并且不要求结果跟原来的顺序一致,那么可以用set来解决 res=set(names) # print(res) l=list(res) print(l) info=[ {'name':'egon','age':18,'sex':'male'}, {'name':'alex','age':73,'sex':'male'}, {'name':'egon','age':20,'sex':'female'}, {'name':'egon','age':18,'sex':'male'}, {'name':'egon','age':18,'sex':'male'}, ] l=[] for dic in info: if dic not in l: l.append(dic) print(l) #[{'name': 'egon', 'age': 18, 'sex': 'male'}, {'name': 'alex', 'age': 73, 'sex': 'male'}, {'name': 'egon', 'age': 20, 'sex': 'female'}]