一、set是一个无序且不重复的元素集合
1、集合需要掌握的知识点:
1 #作用:去重,关系运算, 2 3 #定义: 4 知识点回顾 5 可变类型是不可hash类型 6 不可变类型是可hash类型 7 8 #定义集合: 9 集合:可以包含多个元素,用逗号分割,10 集合的元素遵循三个原则:11 1:每个元素必须是不可变类型(可hash,可作为字典的key)12 2:没有重复的元素13 3:无序14 15 注意集合的目的是将不同的值存放到一起,不同的集合间用来做关系运算,无需纠结于集合中单个值16 17 18 #优先掌握的操作:19 #1、长度len20 #2、成员运算in和not in21 22 #3、|合集23 #4、&交集24 #5、-差集25 #6、^对称差集26 #7、==27 #8、父集:>,>= #9、子集:<,<=
2、集合的关系运算
一.关系运算 有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合 pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'} linuxs={'wupeiqi','oldboy','gangdan'} 1. 求出即报名python又报名linux课程的学员名字集合 2. 求出所有报名的学生名字集合 3. 求出只报名python课程的学员名字 4. 求出没有同时这两门课程的学员名字集合
1 # 有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合 2 pythons={ 'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'} 3 linuxs={ 'wupeiqi','oldboy','gangdan'} 4 # 求出即报名python又报名linux课程的学员名字集合 5 print(pythons & linuxs) 6 # 求出所有报名的学生名字集合 7 print(pythons | linuxs) 8 # 求出只报名python课程的学员名字 9 print(pythons - linuxs)10 # 求出没有同时这两门课程的学员名字集合11 print(pythons ^ linuxs)
3、集合的应用举例:
二.去重 1. 有列表l=['a','b',1,'a','a'],列表元素均为可hash类型,去重,得到新列表,且新列表无需保持列表原来的顺序 2.在上题的基础上,保存列表原来的顺序 3.去除文件中重复的行,肯定要保持文件内容的顺序不变 4.有如下列表,列表元素为不可hash类型,去重,得到新列表,且新列表一定要保持列表原来的顺序l=[ { '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'},]
1 #去重,无需保持原来的顺序 2 l=['a','b',1,'a','a'] 3 print(set(l)) 4 5 #去重,并保持原来的顺序 6 #方法一:不用集合 7 l=[1,'a','b',1,'a'] 8 9 l1=[]10 for i in l:11 if i not in l1:12 l1.append(i)13 print(l1)14 #方法二:借助集合15 l1=[]16 s=set()17 for i in l:18 if i not in s:19 s.add(i)20 l1.append(i)21 22 print(l1)23 24 25 #同上方法二,去除文件中重复的行26 import os27 with open('db.txt','r',encoding='utf-8') as read_f,\28 open('.db.txt.swap','w',encoding='utf-8') as write_f:29 s=set()30 for line in read_f:31 if line not in s:32 s.add(line)33 write_f.write(line)34 os.remove('db.txt')35 os.rename('.db.txt.swap','db.txt')36 37 #列表中元素为可变类型时,去重,并且保持原来顺序38 l=[39 { 'name':'egon','age':18,'sex':'male'},40 { 'name':'alex','age':73,'sex':'male'},41 { 'name':'egon','age':20,'sex':'female'},42 { 'name':'egon','age':18,'sex':'male'},43 { 'name':'egon','age':18,'sex':'male'},44 ]45 # print(set(l)) #报错:unhashable type: 'dict'46 s=set()47 l1=[]48 for item in l:49 val=(item['name'],item['age'],item['sex'])50 if val not in s:51 s.add(val)52 l1.append(item)53 54 print(l1)55 56 57 58 59 60 61 #定义函数,既可以针对可以hash类型又可以针对不可hash类型62 def func(items,key=None):63 s=set()64 for item in items:65 val=item if key is None else key(item)66 if val not in s:67 s.add(val)68 yield item69 70 print(list(func(l,key=lambda dic:(dic['name'],dic['age'],dic['sex']))))
二、字符串格式
1、c语言式的格式化方法之占位符
str1 ='sb'str2 ='big'print('alex is a %s %s'%(str2,str1))
2、利用format格式化
1 dic = { 'a1':'big','a2':'sb'}2 print('alex is a {0} {1}'.format(str2,str1))3 print('alex is a {a1} {a2}'.format(a1= "big",a2='sb'))