集合: 创建 增加 转化 删除 遍历 运算

例题引导:

有两个班英语班和数学班,需要统计这两个班中报名情况,例如统计既报名了英语班又报名数学班的同学名字,即统计为交集。

1
2
english_c ={"ZhangSan","LiSi","James","Alex"}
math_c ={"WangWu","LiuDeHua","James","Alex"}

解题思路:统计两个集合中相同的元素 ,应想到利用集合的相关函数来实现,这道题没什么套路,只需要掌握知识点,会用即可。

参考答案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
english_c ={"ZhangSan","LiSi","James","Alex"}
math_c ={"WangWu","LiuDeHua","James","Alex"}
#1、交集--> in a and in b
#统计既报了英语班又报了数学班的同学print(english_c & math_c)
print(english_c.intersection(math_c))
#输出为:{'Alex', 'James'}

#2、并集--> in a or in b
#统计报名了两个班的所有同学print(english_c | math_c)
print(english_c.union(math_c))
#输出为:{'James', 'ZhangSan', 'LiuDeHua', 'LiSi', 'Alex', 'WangWu'}

#3、差集--> in a not in b
#统计只报名英语班的同学print(english_c - math_c)
print(english_c.difference(math_c))
#输出为:{'LiSi', 'ZhangSan'}

4、交差补集
#统计只报名一个班的同学
print(english_c ^ math_c)
#输出为:{'LiuDeHua', 'ZhangSan', 'WangWu', 'LiSi'}

学习引导:

  • 数据类型-集合
    • 创建
    • 增删
    • 循环
    • 关系运算

数据类型-集合

特点:

  • 里面的元素不可变,不能在集合中存放列表或字典,而字符串、元组、数字等不可变类型可以存放

  • 天生去重,在集合中无法存放相同的元素

  • 无序。不能像列表一样通过索引来标记其元素在列表中的位置,例如{1,2,3}和{2,1,3}是同一个集合。

集合的创建

1
2
3
#集合的创建
s={1,2,3,'32','data','文字','d','f'}
s
1
#{1, 2, 3, '32', 'd', 'data', 'f', '文字'}
1
type(s)  #查看类型
1
#set

列表转集合

1
2
3
#列表转集合
l=[1,2,3,'df','ffd']
l
1
#[1, 2, 3, 'df', 'ffd']
1
set(l)
1
#{1, 2, 3, 'df', 'ffd'}

集合的新增 add

1
2
3
#新增
s.add('科学')
s
1
#{1, 2, 3, '32', 'd', 'data', 'f', '文字', '科学'}

集合的删除 discard/remove/pop

法一

1
2
3
#删除
s.discard('32')
s
1
#{1, 2, 3, 'd', 'data', 'f', '文字', '科学'}

法二

1
2
s.remove(2)
s
1
#{1, 3, 'd', 'data', 'f', '文字', '科学'}

法三

1
s.pop()
1
#1
1
s
1
#{3, 'd', 'data', 'f', '文字', '科学'}

集合的循环

1
2
3
#循环
for i in s:
print(i)
1
2
3
4
5
6
7
8
'''
3
科学
文字
data
d
f
'''

集合的关系运算

1
2
3
#集合的关系运算
s={1,2,3,'32','data','文字','d','f'}
s2={'science','学长','学员','e','f',3,2,6,7}

交集

1
s&s2
1
#{2, 3, 'f'}

并集

1
2
#并集
s | s2
1
#{1, 2, 3, '32', 6, 7, 'd', 'data', 'e', 'f', 'science', '学员', '学长', '文字'}

差集

1
2
#差集
s-s2
1
#{1, '32', 'd', 'data', '文字'}

对称差集

1
2
#对称差集
s ^ s2
1
#{1, '32', 6, 7, 'd', 'data', 'e', 'science', '学员', '学长', '文字'}

判断两个集合是否包含相同的元素,不包含返回true,包含返回false

1
s.isdisjoint(s2)
1
#False
1
s.isdisjoint({123})
1
#True

子集

1
2
#是否为子集的判断
s.issubset(s2)
1
#False
1
{1,2,3}.issubset({1,2,3,4,5})
1
#True

小作业

  1. 以下代码输出结果是:

    1
    2
    s = {1,2,3}
    print(s[1])

    A. 1

    B. 2

    C. 无法输出

  2. 集合的特性有哪些?

评论