【1.8】集合作业
一.关系运算
有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
linuxs={'wupeiqi','oldboy','gangdan'}
1. 求出即报名python又报名linux课程的学员名字集合
2. 求出所有报名的学生名字集合
3. 求出只报名python课程的学员名字
4. 求出没有同时这两门课程的学员名字集合
pythons = {'alex', 'egon', 'yuanhao', 'wupeiqi', 'gangdan', 'biubiu'}
linuxs = {'wupeiqi', 'oldboy', 'gangdan'}
# 1. 求出即报名python又报名linux课程的学员名字集合
inter = pythons.intersection(linuxs)
print inter
# 2. 求出所有报名的学生名字集合
al = pythons.union(linuxs)
print al
# 3. 求出只报名python课程的学员名字
pyonly = pythons.difference(linuxs)
print pyonly
# 4. 求出没有同时这两门课程的学员名字集合
# 这里就用symmetric_difference
xx = pythons.symmetric_difference(linuxs)
print xx
# 下面是解释 symmetric_difference
onlyone = (pythons.union(linuxs)).difference(pythons.intersection(linuxs))
print onlyone
二.去重
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. 有列表l=['a','b',1,'a','a'],列表元素均为可hash类型,去重,得到新列表,且新列表无需保持列表原来的顺序 l=['a','b',1,'a','a'] ListNew = list(set(l)) print ListNew # 2.在上题的基础上,保存列表原来的顺序 # 这里没有用集合的方法 l=['a','b',1,'a','a'] l1=[] for i in l: if i not in l1: l1.append(i) print l1 # 或者用集合这样的方法 li=[] set1 = set() l=['a','b',1,'a','a'] for i in l: if i not in set1: set1.add(i) li.append(i) print set1 print li # 3.去除文件中重复的行,肯定要保持文件内容的顺序不变 import os import os with open('db.txt','r',encoding='utf-8') as read_f,\ open('.db.txt.swap','w',encoding='utf-8') as write_f: s=set() for line in read_f: if line not in s: s.add(line) write_f.write(line) os.remove('db.txt') os.rename('.db.txt.swap','db.txt')
# 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'}, ] #不用集合的概念 也可以完成去重 li=[] for i in l: if i not in li: li.append(i) print li # 或则: li=[] s = set() for i in l: val = (i["name"],i["age"],i["sex"]) if val not in s: s.add(val) li.append(i) print s print li
因为这里不用字典 列表作为 set 的参数
set 参数必须要是可以hash的
浙公网安备 33010602011771号