数学中集合的概念:由n个不重复元素组成的数据合集
一、性质
-
互异性:一个集合中,一个元素只能存在一次
-
确定性:一个元素在与不在集合中是确定的
-
无序性:集合中所有元素的地位是相等的
二、
-
集合:set,容器符号是{}
-
字典:dict,容器符号是{}
创建一个空集合:set()
s_1 = set()
print(s_1, type(s_1))
三、
str1 = 'hello world'
list1 = ['张三', '李四', '张三']
验证了互异性
s_2 = set(list1)
print(s_2, list(s_2))
验证了无序性
print(set(str1))
验证了确定性(使用成员运算)
print('张三' in s_2)
四、集合的交{&},并{|},差{-,^](差集,对称差)
football = {'李华', '小强', '小张', '小红'}
long_jump = {'小张', '小王', '小红'}
英语 and 约等于 &
找出参与了多个项目的学生
print(football & long_jump)
找出参与了运动会学生
print(football | long_jump)
只参与了足球的
print(football - long_jump)
找到值参与了一个项目
print(football ^ long_jump)
五、
子集,真子集,超集
s_3 = {'黑', '白', '红'}
< :真子集 不包含某个集合本身的从这个集合中拿出的任意元素组成的新集合属于这个集合的真子集
print({'黑', '红'} < s_3)
<=: 子集 从这个集合中拿出的任意元素组成的新集合属于这个集合的真子集
print({'黑', '红', '白'} <= s_3)
>:超集(父集合)
print(s_3 > {'白'})
六、集合的增删
s_4 = set()
-
add:一次向一个集合中添加一个元素
-
update:将另一个容器中的元素添加到集合中(与列表的extend类似)
-
注:集合中只能存放不可变类型
-
可变:列表,集合,字典
-
不可变:字符串,元组,整型,浮点型,布尔值,空值类型,复数(complex)
s_4.add('Python')
s_4.update({'Java','C','C++'})
print(s_4)
hashable/unhashable:Python底层规定的内容
一方面hashable决定了数据类型的可变与不可变
-
discard:指定元素删除
s_4.discard('C')
print(s_4)
-
pop:随机删除集合的一个
print(s_4,s_4.pop())
-
clear:直接清楚集合
s_4.clear()
print(s_4)
集合主要使用交并差,对称差,子集,真子集的判断,互异性的使用
用三个集合表示三门学科的选课学生姓名(一个学生可以同时选多门课)
A = {'小刚', '小李', '小红', '小明'}
B = {'小明', '小刚', '小王'}
C = {'小赵', '小王', '小张'}
a. 求选课学生总共有多少人
print(len(A|B|C))
b. 求只选了第一个学科的人的数量和对应的名字
print(A-B-C)
print(len((A^B^C)&A),(A^B^C)&A)
c. 求只选了一门学科的学生的数量和对应的名字
print((A-B-C)|(B-C-A)|(C-B-A))
d. 求只选了两门学科的学生的数量和对应的名字
print(len(A&B)+len(A&C)+len(B&C),(A&B-C)|(A&C-B)|(B&C-A))
e. 求选了三门学生的学生的数量和对应的名字
print(len(A&B&C),A&B&C)