一、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、长度len 20 #2、成员运算in和not in 21 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 os 27 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 item 69 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'))