解读基本数据类型和内置方法(2)
一、元组
1.定义:t = () print(t,type(t))
1.1# 参数为for可以循环的对象(可迭代对象):
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 t2 = tuple("123") 2 print(t2, type(t2)) 3 t3 = tuple([1, 2, 3]) 4 print(t3, type(t3)) 5 t4 = tuple((7, 8, 9)) 6 print(t4, type(t4))
思考:如何利用元组定义一个只有一个值的元组
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 print(('Egon,')) 2 print(tuple(['Egon']))
常用的操作:
1.2元组的索引取值和有序存储:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 t = (1,5,8,9,6,6,3,1) 2 print(t[5]) # 6 3 print(t[-7]) # 5 4 print(t[3]) # 9
1.3元组的切片、长度和内置方法
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 # 切片 2 t = (1,4,7,8,6,3) 3 res = t[0:3] 4 print(res) #[1,4,7] 5 6 #长度 7 print(len(t)) # 6 8 9 #内置方法 10 print(t.count(3)) #1
1.4.元组的案列:#提前拥有一个老师列表,打算开除,如果是校长的亲友团,免开。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 teas = ['Egon','Alex'] 2 3 friends = input('亲友团[0,1]:') 4 5 if friends == '1': 6 teas = tuple(tesa) 7 if not isinstance (teas , tuple): # 判断老师是不是亲友团,不是就删除 8 teas.clear() 9 for t in teas: 10 print('在职老师:%s' %t)
二、字典
1.字典的定义和声明: ***在Python中,字典是仅存的mapping类型***
dict里面的key:他是可以为所有的不可变的类型。如:str tuple int float bool None,停航情况下采用字符串。
dict里面的value:可以为所有的数据类型的。
注意:在字典中,key是具有唯一性的,(新值会覆盖旧值);而value可以进行重复定义的。例如:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 dic = {1: None, None: None, 3.14: None, 2 True: None, 'abc': None, (1,): None, 3 None: 12345 4 } 5 print(dic)
定义字典的三种方式:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 # 1 2 d1 = {'name': 'Owen', 'age': 18} 3 print(d1) 4 5 # 2 6 d2 = dict({'name': 'Owen', 'age': 18}) 7 print(d2) 8 # 3 9 10 d3 = dict(name='Egon', age=58) 11 print(d3)
总结:字典是无序的存储方式,无索引和切片的操作,通过key进行取值。
2.字典的增删改查操作
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 # 定义一个空字典 2 dic = {} 3 4 # 增:key不存在 5 dic['name'] = 'Mac' 6 print(dic) 7 8 # 改:key已存在 9 dic['name'] = 'Big Mac' 10 print(dic) 11 12 # 查: 13 print(dic['name']) 14 15 # 删: 16 del dic['name'] 17 print(dic)
3.Get取值
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 dic = {'a': 10, 'b': 20} 2 # print(dic['c']) # KeyError 3 res = dic.get('c') # 拥有默认值,None,可以避免错误 4 print(res) 5 res = dic.get('d', 'key不存在') # 可以自定义默认值 6 print(res)
4.如何定义一个空字典
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 # 第一个参数:keys:list|tuple|str,第二个参数:统一的默认value 2 d10 = {}.fromkeys(['a', 'b', 'c'], '') 3 print(d10) # {'a': '', 'b': '', 'c': ''}
5.字典的案例:# 添加老师,在原teas基础上添加老师,如果没有,新建一个空teas。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 # 方法一 2 if 'teas' not in d11: # 成员运算 3 d11['teas'] = [] 4 d11['teas'].append('Egon') 5 d11['teas'].append('LiuXX') 6 print(d11) 7 8 9 #方法二 10 # 原d11中,如果有teas这个key,setdefault相当于什么都没干 11 # 如果没有,就将第二个参数(默认值)传给teas存放到d11中 12 d11.setdefault('teas', []) 13 d11['teas'].append('Egon') 14 d11['teas'].append('LiuXX') 15 print(d11)
6.字典的循环与案例:# 不区分大小写,计算每一个名字出现的次数,记录在字典中。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 ls = ['Owen', 'owen', 'Egon', 'LiuXX', 'Liuxx', 'egon', 'egon'] 2 # {'owen': 2, 'egon': 3 ...} 3 name_dic = {} 4 for name in ls: 5 # 名字全小写,不用区分大小写 6 name = name.lower() 7 # 名字是否在字典中存在:存在 - 次数+1 | 不存在 - 添加并设置初值1 8 if name not in name_dic: 9 # 不存在 10 name_dic[name] = 1 11 else: 12 # 存在 13 name_dic[name] += 1 14 print(name_dic)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 ls = ['Owen', 'owen', 'Egon', 'LiuXX', 'Liuxx', 'egon', 'egon'] 2 name_dic = {} 3 for name in ls: 4 name = name.lower() 5 # name已存在,不管,不存在,初始化指定key:name值为1 6 name_dic.setdefault(name, 0) 7 name_dic[name] += 1 8 print(name_dic)
三、集合
什么是set?它具备哪些特点?
i) 单列数据集合:str,list,tuple,set 双列:dict
ii) 无序存储:无key无index,无法取值
iii) 可变数据类型,内部可以存放任意类型数据,但数据具有唯一性 *****
1.{}代表空字典,用set()来创建空集合。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 s1 = set() 2 print(s1, type(s1)) 3 s2 = set('abc') 4 print(s2, type(s2))
2.内置方法与集合之间的运算
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 p_set = {'a', 'b', 'c', 'egon'} 2 l_set = {'x', 'y', 'z', 'egon'} 3 # print(p_set) 4 # print(l_set) 5 6 # 交集 & 7 res = p_set & l_set 8 print(res) 9 res = p_set.intersection(l_set) 10 print(res) # {'egon'} 11 12 # 并集 13 res = p_set | l_set 14 print(res) 15 res = p_set.union(l_set) 16 print(res) # {'z', 'c', 'y', 'x', 'b', 'a', 'egon'} 17 18 # 差集 19 res = p_set - l_set 20 print(res) # {'a', 'b', 'c'} 21 res = l_set.difference(p_set) 22 print(res) # {'x', 'z', 'y'} 23 24 # 对称差集 25 res = p_set ^ l_set 26 print(res) 27 res = p_set.symmetric_difference(l_set) 28 print(res) # {'y', 'a', 'b', 'x', 'z', 'c'} 29 30 print(p_set) 31 print(l_set) 32 # p_set.difference_update(l_set) # 将运算结果赋值给调用者 33 p_set = p_set - l_set 34 print(p_set) # {'c', 'a', 'b'} 35 print(l_set) # {'egon', 'z', 'y', 'x'} 36 37 38 # 添加删除操作 39 s = set() 40 s.add('abc') 41 s.add('xyz') 42 print(s) 43 res = s.pop() # 随机删除一个ele元素 44 print(res) 45 if 'xyz' in s: 46 s.remove('xyz') # 有ele删除,无ele抛异常
3.案例:# 1.多少人参加了选课: ['owen', 'egon', 'liuxx'] 2.都选了哪些课程: ['python', 'linux', 'java'] 3.利用逻辑代码去重
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 names = [] 2 for name, _ in class_map: 3 # 判断列表中是否已存在,不存在才添加 4 if name not in names: 5 names.append(name) 6 print(names) 7 8 # 利用set去重 9 classes = set() 10 for _, cless in class_map: 11 classes.add(cless) 12 classes = list(classes) 13 print(classes)
4.了解:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 sup_set = {1, 2, 3, 4, 5} 2 sub_set = {1, 2, 3} 3 temp_set = {3, 2, 1} 4 flag_set = {7, 8, 9} 5 6 print(sup_set > sub_set) 7 print(sup_set < sub_set) 8 print(temp_set == sub_set) 9 10 # 两个set是否没有交集 11 res = flag_set.isdisjoint(temp_set) 12 print(res) 13 res = temp_set.isdisjoint(sup_set) 14 print(res)