一.关系运算
需求:有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
pythons = {'alex', 'egon', 'yuanhao', 'wupeiqi', 'gangdan', 'biubiu'}
linuxs = {'wupeiqi', 'oldboy', 'gangdan'}
1.求出即报名python又报名linux课程的学员名字集合
# 交集
print(pythons.intersection(linuxs))
print(pythons & linuxs) # {'wupeiqi', 'gangdan'}
2.求出所有报名的学生名字集合
# 并集
print(pythons.union(linuxs))
print(pythons | linuxs) # {'yuanhao', 'egon', 'oldboy', 'gangdan', 'biubiu', 'wupeiqi', 'alex'}
3.求出只报名python课程的学员名字
# 差集
print(pythons.difference(linuxs))
print(pythons - linuxs) # {'yuanhao', 'egon', 'alex', 'biubiu'}
4.求出没有同时这两门课程的学员名字集合
# 对称差集
print(pythons.symmetric_difference(linuxs))
print(pythons ^ linuxs) # {'yuanhao', 'egon', 'oldboy', 'biubiu', 'alex'}
二.去重
1.有列表l = ['a', 'b', 1, 'a', 'a'],列表元素均为可hash类型,去重,得到新列表, 且新列表无需保持列表原来的顺序
li = ['a', 'b', 1, 'a', 'a']
# 因为无需保持列表原来的顺序,所以利用集合特性去重
new_li = list(set(li))
print(new_li) # ['a', 'b', 1]
2.在上题的基础上,保存列表原来的顺序
# 因为要保存列表原来的顺序,使用for循环去重
new_li = []
for item in li:
if item not in new_li:
new_li.append(item)
print(new_li)
3.去除文件中重复的行,肯定要保持文件内容的顺序不变
# 3.去除文件中重复的行,肯定要保持文件内容的顺序不变
"""
注意问题:
1、文件在被读出以后,该文件对象中内容就为空了,不能再对它进行操作
2、random生成的随机值,是一个int类型。
遗忘知识点:random模块
1、random.randint
res = random.randint(起始值:int,结束值:int):顾头也顾尾,返回值res位int类型
总结方法:去重情况
如果不保证原来的数据顺序,且你操作的数据是不可变类型。这个时候就用集合去重。
如果你要保证原来的数据顺序,且你操作的数据是不可变类型。这个时候就用在外面定义空列表:li=[] 并判断你需要去重的值是不是在里面。如果在那么就不追加,如果不在那就追加。最后要用的话久就从你放的列表里,把数据使用for循环取值捣腾出来。
"""
import os,random
file = r'a.txt'
swap_file = r'swap.txt'
if os.path.isfile(file):
os.remove(file)
with open(file, 'w') as f:
for i in range(40):
random1_5 = random.randint(1, 5)
f.write('我是数字:%s\n' % random1_5)
with open(file, 'r') as f:
print('{:-^50}'.format('源文件去重之前'))
print(f.read())
# 修改文件操作
with open(file, 'r') as f_read, open(swap_file, 'w') as f_write:
li = []
for line in f_read:
if line not in li:
li.append(line)
for item in li:
f_write.write(item)
os.remove(file)
os.rename(swap_file, file)
with open(file, 'r') as f:
print('{:-^50}'.format('去重修改之后'))
print(f.read())
4.有如下列表,列表元素为不可hash类型,去重,得到新列表,且新列表一定要保持列表原来的顺序
li = [
{'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'},
]
# 因为要保存列表原来的顺序,使用for循环去重
new_li = []
for item in li:
if item not in new_li:
new_li.append(item)
print(new_li)
'''
[
{'name': 'egon', 'age': 18, 'sex': 'male'},
{'name': 'alex', 'age': 73, 'sex': 'male'},
{'name': 'egon', 'age': 20, 'sex': 'female'}
]
'''