1.元组(tuple)
作用:能够存储多个元素,元素与元素之间用逗号隔开,元素可以是任意类型,元组不可以被修改
定义:与列表类型比,把[]换成()
优先掌握的操作:
t = (1,2,3,'a','b',[1,2,3]) # tuple((1,2,3,'a','b',[1,2,3]) ) print(type(t)) #<class 'tuple'> t1 = tuple(1) # 报错 必须传容器类型
Ps:在定义容器类型的时候,哪怕内部只有一个元素,你也要用逗号隔开 区分一下(******)
1.按照索引值(正向取+反向取):只能取
t = (1, 2, 3, 'a', 'b', [1, 2, 3]) print(t[0]) # 1 t[-1][0] = 2 print(t) # (1, 2, 3, 'a', 'b', [2, 2, 3])
2.切片(顾头不顾尾,步长)
t = (1, 2, 3, 'a', 'b', [1, 2, 3]) print(t[1:4]) # (2, 3, 'a')
3.长度(len())
print(len(t))
4.成员运算 in和not in
print('a' in t)
5.循坏
for i in t: print(i)
#统计
print(t.count(2))
#index
print(t.index('a'))
Ps:能存多个值,有序,不可变类型
2.集合(set)
作用:去重,关系运算
定义:
s = {1,2,3,4,5} #<class 'set'> s = set()
print(type(s))
s1 = set()
print(type(s1)) # 注意在定义空集合的时候只能用关键字set
x = {} # <class 'dict'> 如果你仅仅只写了一个大括号,那么python默认它是一个字典类型
print(type(x)
集合:可以包含多个元素,用逗号分割
集合的元素遵循三个原则:
1.每个元素必须是不可变类型
可变:不可hash
不可变:可hash
# s = {1,2,3,4,5,6,'a',(1,2),[1,2]} # 报错 # s = {1,2,3,4,5,6,'a',(1,2),{"name":'jason'}} # 报错
2.没有重复的元素
# s = {1,2,2,2,2,2,2,2,2,2,3,4,4,4,4,4,5} # print(s) # 自动将重复的元素 去除
3.无序
# s = {1, 2, 3, 4, 5, 6} # print(s[1])
Ps:注意集合的目的是将不同的值存放到一起,不同的集合间用来做关系运算,无需纠结于集合中单个值
优先掌握的操作:
1.长度len
# s = {1,2,3,4} # print(len(s))
2.成员运算 in 和 not in
3.常用操作+内置的方法
pythons={'李二丫','张金蛋','李银弹','赵铜蛋','张锡蛋','alex','oldboy'} linuxs={'lxx','egon','张金蛋','张锡蛋','alex','陈独秀'} # 取及报名python课程又报名linux课程的学员:交集 print(pythons & linuxs) print(pythons.intersection(linuxs)) # 取所有报名老男孩课程的学员:并集 print(pythons | linuxs) print(pythons.union(linuxs)) # 取只报名python课程的学员: 差集 print(pythons - linuxs) print(pythons.difference(linuxs)) # 取只报名linux课程的学员: 差集 print(linuxs - pythons) print(linuxs.difference(pythons)) # 取没有同时报名两门课程的学员:对称差集 print(pythons ^ linuxs) print(pythons.symmetric_difference(linuxs))
4.是否相等
s1={1,2,3} s2={3,1,2} print(s1 == s2)
5.父集:一个集合包含另一个集合
s1={1,2,3} s2={1,2} print(s1 >= s2) print(s1.issuperset(s2)) s1={1,2,3} s2={1,2,4} print(s1 >= s2)
6.子集
s1={1,2,3} s2={1,2} print(s2 <= s1) print(s2.issubset(s1))
需要掌握的操作
s1={1,2,3} s1.update({3,4,5}) print(s1) s1={1,2,3} res=s1.pop() print(res) s1={1,2,3} res=s1.remove(3) #单纯的删除,返回值为None print(s1) s1={1,2,3} s1.add(4) print(s1) s1={1,2,3} s2={1,2} s1.difference_update(s2) #s1=s1.difference(s2) print(s1) s1={1,2,3} res=s1.discard(3) ##单纯的删除,返回值为None print(s1) print(res) s1.remove(444444) #删除的元素不存在则报错 s1.discard(444444) #删除的元素不存在不会报错 s1={1,2,3} s2={1,2,4} print(s1.isdisjoint(s2)) #如果两个集合没有交集则返回Flase s1={1,2,3} s2={4,5,6} print(s1.isdisjoint(s2)) #如果两个集合没有交集则返回True
总结:
1.存多个值
2.无序
3.set可变
集合去重
局限性
1、无法保证原数据类型的顺序
2、当某一个数据中包含的多个值全部为不可变的类型时才能用集合去重
names=['alex','egon','alex','alex','egon','lxx'] s=set(names) print(s) l=list(s) print(l) stus_info=[ {'name':'egon','age':18}, {'name':'alex','age':73}, {'name':'oldboy','age':84}, {'name': 'egon', 'age': 18}, {'name': 'egon', 'age': 18}, {'name': 'egon', 'age': 18}, {'name': 'oldboy', 'age': 84}, ] # set(stus_info) # 报错 l=[] for info in stus_info: if info not in l: l.append(info) # print(l) stus_info=l print(stus_info)
3.字典(dict)
作用:能存存储多组 key:value键值对 key是对value的描述 key通常情况下都是字符串
其实这个key只能是不可变类型,value可以是任意数据类型
定义:
# d = {'name':'jason','password':123} # d = dict( {'name':'jason','password':123}) # # d1 = {1:'1',0:'0',1.11:'1.11',(1,2):'到底能不能呢?'} # print(d1[1.11]) # print(type(d1)) # print(d1[(1,2)]) # d2 = {'name':'jason','name':'tank','name':'nick','password':123} # 强调:字典的key是不能重复的 要唯一标识一条数据 # 如果重复了 只会按照最后一组重复的键值对存储 # print(len(d2)) # print(d2)
优先掌握的操作:
1.按key键取值:可存可取
# d3 = {'name':'jason','password':'123'} # print(id(d3)) # print(d3['name']) # d3['name'] = 'egon' # d3['name'] = 'kevin' # d3['name'] = 'xxx' # d3['name'] = 'ooo' # # d3['age'] = 18 # 赋值语句当key不存在的情况下,会自动新增一个键值对(******) # print(d3,id(d3))
2.长度(len())
统计的键值对的个数
3.成员运算in和not in,对于字典来说只能判断key值
# d3 = {'name':'jason','password':'123'} # print('123' in d3) # print('name' in d3)
4.删除
# d3 = {'name':'jason','password':'123'} # del d3['name'] # print(d3) # res = d3.pop('name') # 弹出仅仅是value # res = d3.pop('age') # 当键不存在的时候直接报错 # print(res) # print(d3) # d3.clear() # print(d3)
定义字典的三种方式
掌握
# d1 = {'name':'jason','password':123}
掌握
# d2 = dict(name='jason',password=123,age=18) # (******) # print(d2,type(d2))
# 了解即可
l = [ ['name','jason'], ['age',18], ['hobby','read'] ] # d = {} # # for i in l: # ['name','jason'],['age',18]... # for k,v in l: # ['name','jason'],['age',18]... # # d[i[0]] = i[1] # d[k] = v # print(d) # d3 = dict(l) # print(d3)
5.键keys(),值values(),键值对items()
# d1 = {'name':'jason','password':123} # print(d1.keys()) # dict_keys(['name', 'password']) 老母猪 # # for k in d1.keys(): # # print(k) # print(d1.values()) # dict_values(['jason', 123]) 老母猪 现在就把它当成一个列表来看即可 # # print(d1.items()) # dict_items([('name', 'jason'), ('password', 123)]) # 就把它看成是列表套元组,元组的第一个元素是字典的key 第二个元素是字典的value # get()根据key获取value(*******************************) # d1 = {'name':'jason','pwd':123} # print(d1['name']) # print(d1['age']) # print(d1.get('name','你给我的name在字典的key中')) # res = d1.get('age') # 当字典的key不存在的情况 不报错 返回None # res1 = d1.get('xxx','你给我的age在字典的key中') # 当字典的key不存在的情况 不报错 返回None # # get可以传第二个参数。当你的key不存在的情况下,返回第二个你写好的参数信息 # print(res1) # print(d1.get('xxx','asdsad')) # 第二个参数不写的话 当key不存在的情况下返回None,写了就返回写了内容 # dict.fromkeys() 快速的创建一个字典 # l1 = ['name','password','age','hobby'] # print(dict.fromkeys(l1,123)) # dict.popitem() # print(d1.popitem()) # 尾部以元组的形式弹出键值对 # dict.setdefault() # d1 = {'name':'jason','pwd':123} # res1 = d1.setdefault('name','xxoo') # 当键存在的情况下 不修改值 并且将原先key对应值返回给你 # print(d1,res1) # res2 = d1.setdefault('age',18) # 当键不存在的情况下 新增一个键值对 并且将新增的键值对的值返回给你 # print(d1,res2) # dict.update() # d1 = {'name':'jason','pwd':123} # d2 = {"age":18} # # d1.update(d2) # d1['age'] = 18 # d1.update(age=666) # print(d1
6.循坏
# d1 = {'name':'jason','password':123} # for i in d1: # print(i)
总结
1.存多个值
2.无序
3.可变