集合、字符编码-练习👈

一.关系运算

需求:有如下两个集合,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'}
]
'''
posted @ 2020-03-12 22:48  给你加马桶唱疏通  阅读(265)  评论(0编辑  收藏  举报