# 作业:
# 一.关系运算
# 有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
# pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
# linuxs={'wupeiqi','oldboy','gangdan'}
# 1. 求出即报名python又报名linux课程的学员名字集合
# 2. 求出所有报名的学生名字集合
# 3. 求出只报名python课程的学员名字
# 4. 求出没有同时这两门课程的学员名字集合
import os# 第二大题第三小题文件操作,对文件重命名需要这个头文件
pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'}
linuxs={'wupeiqi','oldboy','gangdan'}
#1. 求出即报名python又报名linux课程的学员名字集合
print(pythons & linuxs)
# 2.求出所有报名的学生名字集合
print(pythons | linuxs)
# 3.求出只报名python课程的学员名字
print(pythons - linuxs)
# 4.求出没有同时这两门课程的学员名字集合
print(pythons ^ linuxs)
# 二.去重
#
#1. 有列表l=['a','b',1,'a','a'],列表元素均为可hash类型,去重,得到新列表,且新列表无需保持列表原来的顺序
#
#去重,无需保持原来的顺序
l=['a','b',1,'a','a']
print(set(l))
# 2.在上题的基础上,保存列表原来的顺序
#
#去重,并保持原来的顺序
#方法一:不用集合
l=[1,'a','b',1,'a']
l1=[]
for i in l:
if i not in l1:
l1.append(i)
print(l1)
#方法二:借助集合
l1=[]
s=set()
for i in l:
if i not in s:
s.add(i)
l1.append(i)
print(l1)
# 3.去除文件中重复的行,肯定要保持文件内容的顺序不变
#通过文件将文件中的每一行数据读取出来
new_list=[]
with open('db.txt','r',encoding='utf-8') as f:
for line in f:
#print(line)
#通过new_list给文件中的数据去重,并且保证原来的位置不变
if line not in new_list:
new_list.append(line)
print(new_list)
#将去重后的数据,重新写入到当前的db.txt文件中
with open('db.txt','w',encoding='utf-8') as f:
for line in new_list:
f.write(line)
# 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'},
# ]
#
#列表中元素为可变类型时,去重,并且保持原来顺序
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'},
]
list=[]
for dict in l:
if dict not in list:
list.append(dict)
print(list)