1.声明一个字典保存一个学生的信息,学生信息中包括: 姓名、年龄、成绩(单科)、电话、性别(男、女、不明)
stu = {'name':'小明','age':18,'mate_score':90,'tel':15672963512,'sex':'男'}
2.声明一个列表,在列表中保存6个学生的信息(6个题1中的字典)
a.统计不及格学生的个数
b.打印不及格学生的名字和对应的成绩
c.统计未成年学生的个数
d.打印手机尾号是8的学生的名字
e.打印最高分和对应的学生的名字
f.删除性别不明的所有学生
g.将列表按学生成绩从大到小排序(挣扎一下,不行就放弃)
stu_date = [
{'name':'小明','age':18,'math_score':90,'tel':'15672963528','sex':'男'},
{'name':'小王','age':20,'math_score':99,'tel':'15525422512','sex':'女'},
{'name':'小李','age':28,'math_score':37,'tel':'18222142512','sex':'性别不明'},
{'name':'小刘','age':18,'math_score':46,'tel':'15674553512','sex':'男'},
{'name':'小师','age':16,'math_score':96,'tel':'15644225708','sex':'性别不明'},
{'name':'小汪','age':17,'math_score':52,'tel':'15672963512','sex':'男'}
]
# 统计不及格人数,打印不及格学生的名字和对应成绩
counts = 0
for pass_not in stu_date:
if pass_not['math_score']<60:
counts+=1
print('姓名:',pass_not['name'],'成绩:',pass_not['math_score'])
print(counts)
#统计未成年学生人数
nums = 0
for i in stu_date:
if i['age']<18:
nums+=1
print(nums)
#获取手机尾号是8的学生姓名
for i in stu_date:
list1 = list(i['tel'])
if list1[-1]=='8':
print(i['name'])
#打印最高分和对应学生的姓名
score1 = stu_date[0]['math_score']
for i in stu_date:
if i['math_score'] > score1:
score1 = i['math_score']
for j in stu_date:
if j['math_score']==score1:
print(j['name'],score1)
#删除性别不明的所有学生
list2 = []
for ind,i in enumerate(stu_date):
if i['sex']!='性别不明':
list2.append(stu_date[ind])
print(list2)
#按成绩从大到小排序
scores = sorted([i['math_score'] for i in stu_date],reverse=True)
new_stu = []
for j in scores:
for x in stu_date:
if x['math_score']==j:
new_stu.append(x)
stu_date.remove(x)
break
print(new_stu)
3.用三个集合表示三门学科的选课学生姓名(一个学生可以同时选多门课)
a. 求选课学生总共有多少人
b. 求只选了第一个学科的人的数量和对应的名字
c. 求只选了一门学科的学生的数量和对应的名字
d. 求只选了两门学科的学生的数量和对应的名字
e. 求选了三门学生的学生的数量和对应的名字
ma = {'小明','小花','TOM','小军','大黄','金丝猴'}
sc = {'大强','旺财','阿狗','小明','大黄','小马','大力'}
ha = {'曾小贤','TOM','胡一菲','狗剩','崽子','小花','小军'}
#a
num = ma|sc
num1 = num|ha
print(len(num1))
#b
list1= list(ma)
list3=list1.copy()
list2= list(sc|ha)
count = 0
for i in list1:
for j in list2:
if i==j:
list3.remove(i)
count+=1
print(len(list1)-count,list3)
#c
a=ma^sc
b=a^ha-(ma&ha&sc)
print(len(b),b)
#d
a=ma&sc-ha
b=ma&ha-sc
c=sc&ha-ma
d=a|b|c
print(len(d),d)
#e
a=ma&sc
b=a&ha
print(b)
字典
字典是什么
-
定义:容器型数据类型,以{键:值}为标志,{}为空字典
-
写法:{键1:值1,键2:值2,键3:值3,…}
-
要求:键(key)–必须是不可变数据,一般用字符串(数字、元组、字符串)
是唯一的,不能存在多个同样的键
值(value)–可以是所有数据类型
-
特点:可变,无序
字典的增删改查
-
增/改
语法:字典[key]=value
如果key是字典中已存在的,此处就是修改key对应的值
如果key是字典中不存在的,此处就是增加(key,value)组成的键值对
a = {'a':10,'b':20,'c':30} a['a']=100 print(a) # 修改。{'a':100,'b':20,'c':30} a['d']=40 print(a) # 增加。{'a':100,'b':20,'c':30,'d':40}
语法2:字典.setdefault(键,值)—只能添加键值对,不能修改
a = {'a':10,'b':20,'c':30} a.setdefault('d',40) print(a) # {'a':10,'b':20,'c':30,'d':40}
-
删
- del 字典[key]
a = {'a':10,'b':20,'c':30} del a['b'] print(a) # {'a':10,'c':30} del a['d'] # 报错,不能删不存在的键值对
2)字典.pop(key)–取出指定key对应的值,并返回值
a = {'a':10,'b':20,'c':30} b=a.pop('a') print(a) # {'a':10,'b':20,'c':30} print(b) # 10,取出的key对应的值可以赋值给变量
-
查
1)查单个
语法1:字典[key]----获取不存在的键对应的值,会报错
a = {'a':10,'b':20,'c':30} print(a['b']) # 20 输出为值
语法2:字典.get(key)—获取不存在的键对应的值,不会报错,会输出None
字典.get(key,默认值)—获取不存在的键对应的值,会输出默认值,获取存在的,会按原值输出
a = {'a':10,'b':20,'c':30} print(a.get('a')) # 10 print(a.get('d')) # None print(a.get('c',100)) # 30 print(a.get('d',100)) # 100
2)遍历----变量取到的是字典的键
语法:for key in 字典:
print(key,字典[key])
a = {'name':'小明','age':15,'gender':'男','分数':95} for keyes in a: print(keyes,a[keyes])
字典相关操作
-
只能进行== !=的运算
比较的是字典键值对是否相同,顺序可以不同
a = {'name':'小明','age':15,'分数':95} b = {'age':15,'分数':95,'name':'小明'} print(a==b) # True,顺序不同,但键值对个数和值相同
-
in 和 not in
看键是否在字典中
a = {'name':'小明','age':15,'分数':95} print('name' in a) # True
-
相关函数
sum max min sorted(在字典中不怎么实用)
len(字典)–获取键值对的个数
a = {'name':'小明','age':15,'分数':95} print(len(a)) # 3
dict(序列)–序列中每个元素都是一个小序列
小序列中必须有两个元素
两元素的第一个必须是不可变的数据(字符串,元组,数字)
seq = [(1,2),(10,20),(100,200),('1000',2000),'ab'] print(dict(seq)) # {1:2,10:20,100:200,'1000':2000,'a':'b'}
字典相关方法
-
字典.clear()-清楚字典中所有键值对
-
字典.copy()-拷贝字典返回一个与原字典相等的新的字典,新字典独立存在
-
*(了解)dict.fromkeys(序列,值)–创建一个字典,将序列中的元素(序列中的元素都必须是不可变的数据)作为键,值作为他们的值,如果不输入值,他们的值为None(空)
-
字典.items()–将字典中的键和值都以序列的形式成对输出
a = {'name':'小明','age':15,'分数':95} print(a.item()) # dict_items([('name', '小明'), ('age', 15), ('分数', 95)]) 可使用list转换成列表 for key,value in a.items(): print(key,value)
-
字典.keys()–将字典中的键都以序列的形式输出
a = {'name':'小明','age':15,'分数':95} print(a.keys()) # dict_keys(['name', 'age', '分数']) 可使用list转换成列表 for k in a.keys(): print(k,end=' ') # name age 分数
-
字典.values–将字典中的值都以序列的形式输出
a = {'name':'小明','age':15,'分数':95} print(a.values()) # dict_keys(['小明',15,95]) 可使用list转换成列表 for k in a.values(): print(k,end=' ') # '小明' 15 95
-
字典.update(序列)–将序列中的元素以键值对的形式添加到字典中,序列里面的元素必须是小序列,小序列里必须有两个元素,第一个元素必须是不可变的数据
a = {'name':'小明','age':15,'分数':95} a.update(((1,2),('a',21))) print(a) # {'name': '小明', 'age': 15, '分数': 95, 1: 2, 'a': 21}
集合
集合是什么
-
什么是集合:容器型数据,以{}为标志,空集合为set( )
-
写法:{元素1,元素2,元素3,。。。。。。}
-
要求:元素必须是不可变的数据类型,且是唯一的
-
特点:可变,无序
-
功能:去重
a = [1,2,5,1,2,8,9] print(list(set(a))) # [1,2,5,8,9]
集合运算
1.并集(|)—两集合中的元素合并
a = {1,5,6,7,8}
b = {1,5,9,3,6}
print(a|b) # {1,5,6,9,3,7,8}
2.交集(&)—两集合的公共部分
a = {1,5,6,7,8}
b = {1,5,9,3,6}
print(a&b) # {1,5,6}
3.差集(-)—一集合减去与另一集合公共的部分
a = {1,5,6,7,8}
b = {1,5,9,3,6}
print(a-b) # {7,8}
print(b-a) # {9,3}
4.对称差集(^)—两集合去掉公共部分相加
a = {1,5,6,7,8}
b = {1,5,9,3,6}
print(a^b) # {7,8,3,9}
5.真子集(>)—一集合为另一集合中的一部分
a = {1,5,6,7,8}
b = {1,5,6}
print(a>b) # True
6.子集(>=)—一集合为另一集合的全部
a = {1,5,6}
b = {1,5,6}
print(a>=b) # True
print(b>=a) # True
a = {1,5,6,7,8}
b = {1,5,9,3,6}
print(a-b) # {7,8}
print(b-a) # {9,3}
4.对称差集(^)—两集合去掉公共部分相加
a = {1,5,6,7,8}
b = {1,5,9,3,6}
print(a^b) # {7,8,3,9}
5.真子集(>)—一集合为另一集合中的一部分
a = {1,5,6,7,8}
b = {1,5,6}
print(a>b) # True
6.子集(>=)—一集合为另一集合的全部
a = {1,5,6}
b = {1,5,6}
print(a>=b) # True
print(b>=a) # True