python基础学习-day10==课后作业练习(集合)

# 作业:
#  一.关系运算
#   有如下两个集合,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)
原文地址:https://www.cnblogs.com/dingbei/p/12488310.html