字典
增和改:
字典[key] = 值 - 当key存在的时候就是修改指定Key对应的值,当key不存在的时候就是添加键值对
删:
1.del字典[key] - 删除字典中指定key对应的键值对
2.del 字典[key] - 删除字典中指定Key对应的键值对
字典相关操作
1.字典不支持+、* 和比较大小。只支持比较是否相等的运算
2.in 和 not in - 判断字典中指定key对应的键值对
3.dict 、len
dict(数据) - 将数据转换成字典
a.数据必须是序列
b.序列中元素必须是小序列,而且小序列有且只有两个元素,第一个元素必须是不可变的
字典推导式
{表达式1:表达式2 for 变量 in 序列}
{表达式1 :表达式2 for 变量 in 序列 if 条件语句}
dict(表达式 for x in 序列) - 表达式必须是有且只有两个元素的序列,第一个元素必须是不可变的
字典相关方法
1.字典.clear() - 清空字典
2.字典.copy() - 复制字典产生一个一模一样的新字典
3.字典.values() - 获取字典所有的值,返回的不是列表是一种序列
4.字典.keys() - 获取字典所有的键,返回的不是列表是一种序列
5.字典.item() - 获取字典所有的键值对;返回的是序列,序列中的元素是每个键值对对应的元组
6.字典.setdefault(key, value) - 在字典中添加键值对(不会在key存在的时候进行修改操作)
7.字典.update(序列) - 将序列中所有的元素作为键值对添加到字典中,序列必须是可以转换成字典的序列
8.字典.update(字典2) - 将字典2中的键值对全部添加到字典1中
集合
1.含义:集合是容器型数据类型;将{}作为容器的标志,元素之间用逗号隔开:{元素1, 元素2, 元素3…}
集合是可变的:集合是无序的(不支持下标)
元素:必须是不可变的数据;元素是唯一的
1)空集合:set1 = set()
2).集合是无序的
3).集合的元素必须是不可变的类型的数据
4).集合的元素是唯一的,自带去重功能,只能去元素是不可变的序列的重。
2.增删改查
1)查 - 集合只能遍历
2)增 - 集合.add(元素) - 在集合中添加指定元素
3)集合.update(序列) - 将序列中的元素全部添加到集合中
删:
4)集合.remove(元素) - 删除指定元素,当元素不存在时报错
5)集合.discard(元素) - 删除指定元素,当元素不存在时不报错
改:
6)改 - 不能直接修改某个元素,只能先删再加
3.数学集合运算:交集、并集、差集、对称差集、子集和真子集
1)交集:&
集合1 & 集合2 - 获取两个集合公共的部分
print(s1 & s2) # {5, 6, 7}
2)并集:|
print(s1 | s2) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
- 差集:-
集合1 - 集合2 - 获取集合1中除了在集合2里面的元素
print(s1 - s2) # {1, 2, 3, 4}
print(s2 - s1) # {8, 9}
4)对称差集 ^
集合1 ^ 集合2 - 获取只在集合1和只在集合2中的所有元素
print(s1 ^ s2) #print((s1 | s2) - (s1 & s2)) {1, 2, 3, 4, 8, 9}
5)子集和真子集
集合1 >= 集合2 - 判断集合2是否是集合1的子集
集合1 > 集合2 - 判断集合2是否是集合1的真子集
print({100, 200, 300} >= {1, 2}) # False
print({1, 2, 3, 100, 200} >={1, 2}) # True
print({1, 2, 3, 100, 200} > {1, 2, })
4.集合相关操作
1)in 和 not in
print({1, 2, 3} | {3, 4}) # True
2)max、min、sorted
print(max({10, 3, 95})) # 95
print(sorted({34, 56, 32, 21, 98})) # [21, 32, 34, 56, 98]
print(sum({23, 55, 66, 32})) # 176
print(len({23, 45, 65, 43, 23, 65})) # 4 自动去重
作业
3.用三个集合表示三门学科的选课学生姓名(一个学生可以同时选多门课)
a. 求选课学生总共有多少人
b. 求只选了第一个学科的人的数量和对应的名字
c. 求只选了一门学科的学生的数量和对应的名字
d. 求只选了两门学科的学生的数量和对应的名字
e. 求选了三门学生的学生的数量和对应的名字
a:求选课学生总共有多少人
Chinese = {'小猪', '佩奇', '乔治', '山羊'}
math = {'小猪', '佩奇', '小乔 ', '小治', '奇奇', }
English = {'佩奇', '奇奇', '犬夜叉', '桔梗', '杀生丸', }
print(len(Chinese | math | English), '个学生', sep='')
b:求只选了第一个学科的人的数量和对应的名字
Chinese = {'小猪', '佩奇', '乔治', '山羊'}
math = {'小猪', '佩奇', '小乔 ', '小治', '奇奇', }
English = {'佩奇', '奇奇', '犬夜叉', '桔梗', '杀生丸', }
count = (Chinese - math - English )
print(len(count), '个学生只选择了语文', count, sep='')
c. 求只选了一门学科的学生的数量和对应的名字
Chinese = {'小猪', '佩奇', '乔治', '山羊'}
math = {'小猪', '佩奇', '小乔 ', '小治', '奇奇', }
English = {'佩奇', '奇奇', '犬夜叉', '桔梗', '杀生丸', }
a = (Chinese & math)
b = (English & Chinese)
c = (math & English)
new_set = (a | c | b )
count = (Chinese | math | English)
print(len(count - new_set), '个学生只选择了一门学科', count - new_set, sep='')
d. 求只选了两门学科的学生的数量和对应的名字
Chinese = {'小猪', '佩奇', '乔治', '山羊'}
math = {'小猪', '佩奇', '小乔 ', '小治', '奇奇', }
English = {'佩奇', '奇奇', '犬夜叉', '桔梗', '杀生丸', }
a = (Chinese & math)
b = (math & English)
c = (English & Chinese)
count=a|b|c
stu = (Chinese & math & English)
print(len(count ^ stu), '个学生', (count^stu), sep='')
e. 求选了三门学生的学生的数量和对应的名字
Chinese = {'小猪', '佩奇', '乔治', '山羊'}
math = {'小猪', '佩奇', '小乔 ', '小治', '奇奇', }
English = {'佩奇', '奇奇', '犬夜叉', '桔梗', '杀生丸', }
count = (Chinese & math & English)
print(len(Chinese & math & English),'个学生选择了三门学科', count, sep='')