Python练习_集合和深浅拷贝_day7
1.
1.作业
1、把列表中所有姓周的人的信息删掉(升级题:此题有坑, 请慎重): lst = ['周老二', '周星星', '麻花藤', '周扒皮'] 结果: lst = ['麻花藤'] 2、车牌区域划分, 现给出以下车牌. 根据车牌的信息, 分析出各省的车牌持有量. (升级题) cars = ['鲁A32444','鲁B12333','京B8989M','黑C49678','黑C46555','沪 B25041'.....] locals = {'沪':'上海', '黑':'黑龙江', '鲁':'山东', '鄂':'湖北', '湘':'湖南', '京': '北京'.....} 结果: {'山东': 2, '北京': 1, '黑龙江': 2, '上海': 1} 3、干掉主播. 现有如下主播收益信息: zhubo = {'卢本伟':522000, '冯提莫':189999, '金老板': 99999, '吴老板': 250000, 'alex': 126} 1. 计算主播平均收益值 2. 干掉收益小于平均值的主播 3. 干掉卢本伟
2.
2.默写
简述什么是深浅copy.
有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
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'] li = set(l) print(li)
2.在上题的基础上,保存列表原来的顺序
l=['a','b',1,'a','a'] li = [] for i in l: if i not in li: li.append(i) print(li)
3.去除文件中重复的行,肯定要保持文件内容的顺序不变
方法一:
import os with open('db.txt',mode='w',encoding='utf-8') as f: f.write('''我也不知道要写什么 反正要有重复的行 那就这行吧 那就这行吧 完毕 ''') with open('db.txt',encoding='utf-8') as read_f,\ open('db1.txt',mode='w',encoding='utf-8') as write_f: li = [] for line in read_f.readlines(): if line not in li: li.append(line) write_f.write(line) os.remove('db.txt') os.replace('db1.txt','db.txt')
方法二:
with open('db.txt',mode='w',encoding='utf-8') as f: f.write('''我也不知道要写什么 反正要有重复的行 那就这行吧 那就这行吧 完毕 ''') with open('db.txt',encoding='utf-8') as f1: li = [] for line in f1.readlines(): if line not in li: li.append(line) with open('db.txt',mode='w',encoding='utf-8') as f2: for j in li: f2.write(j)
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'}, ] li = [] for i in range(0,len(l)): if l[i] not in li: li.append(l[i]) print(li)
答案
1、把列表中所有姓周的人的信息删掉(升级题:此题有坑, 请慎重)
第一种方法: lst = ['周老二', '周星星', '麻花藤', '周扒皮'] # 结果: lst = ['麻花藤'] li = [] for i in range(len(lst)): if not lst[i].startswith('周'): li.append(lst[i]) lst = li print(lst) 第二种方法:(浅copy) lst = ['周老二', '周星星', '麻花藤', '周扒皮'] for i in lst[:]: if '周' == i.strip()[0]: lst.remove(i) print(lst)
2、车牌区域划分, 现给出以下车牌. 根据车牌的信息, 分析出各省的车牌持有量. (升级题)
cars = ['鲁A32444','鲁B12333','京B8989M','黑C49678','黑C46555','沪 B25041'.....] locals = {'沪':'上海', '黑':'黑龙江', '鲁':'山东', '鄂':'湖北', '湘':'湖南', '京': '北京'.....} 结果: {'山东': 2, '北京': 1, '黑龙江': 2, '上海': 1} cars = ['鲁A32444','鲁B12333','京B8989M','黑C49678','黑C46555','沪 B25041'] locals = {'沪':'上海', '黑':'黑龙江', '鲁':'山东', '鄂':'湖北', '湘':'湖南'} dic = {} for i in range(len(cars)): dic[locals[cars[i][0]]] = 0 for i in range(len(cars)): dic[locals[cars[i][0]]] += 1 print(dic)
3、干掉主播. 现有如下主播收益信息: zhubo = {'卢本伟':522000, '冯提莫':189999, '金老板': 99999, '吴老板': 250000, 'alex': 126} 1. 计算主播平均收益值 2. 干掉收益小于平均值的主播 3. 干掉卢本伟
zhubo = {'卢本伟':522000, '冯提莫':189999, '金老板': 99999, '吴老板': 250000, 'alex': 126} sum = 0 for i in zhubo: sum += zhubo[i] ave_sum = sum / len(zhubo) print(ave_sum) dic = {} for j in zhubo: if zhubo[j] >= ave_sum: dic[j] = zhubo[j] zhubo = dic print(zhubo) zhubo.pop('卢本伟') print(zhubo)