集合(set)– 字典的近亲
集合的两大功能:
- 集合可以实现去重的功能
- 集合可以进行关系检测:交集、并集、差集、超集
集合的定义:
1. 集合里的元素不可以重复:
若定义的时候有重复,会自动去重:
2. 定义一个空集合:
3. 利用集合的特性实现对列表去重:
集合的特性:
- 集合是无序、不重复的数据结构,用此不支持索引、切片、重复、连接
- 支持成员操作符
- 支持for循环
1. 成员操作符:
2. for循环:
(1)示例1
(2)示例2
集合的用法:
1. 增加元素:
(1)增加一个元素到集合中:
(2) 同时增加多个元素到集合中:
2. 删除元素:
(1) pop的方式(随机删除):
(2)remove的方式(这种方式可以删除指定集合元素,若元素不存在则报错):
(3) discard( ) 删除集合指定元素(如果不存在,则do nothing)
remove删除的元素不存在,会报错:
(4) 清空集合内容:
3. 集合:
(1)并集:
(2) 交集:
(3)差集
(4)对等差分:并集-交集
(5) 判断:s3是否为s4的超集:
(6) 判断:s3 是否为 s4的子集
(7)判断:集合s3 和 s4 是否不相交:
集合练习题1:
import random
s1 = set([])
for i in range(int(input('输入样本数:'))):
s1.add(random.randint(1, 1001))
s2 = sorted(s1) ### 排序后变成了列表类型。
print(s1, '\n', type(s1), '\n', s2, '\n', type(s2))
集合练习题2:
import random
# 产生两组范围在[10,20]的随机数,每组10个数:
li1 = list()
li2 = list()
for i in range(10):
li1.append(random.randint(10,20))
# print(li1)
for j in range(10):
li2.append(random.randint(10,20))
# print(li2)
#1.20个数中,一共有多少个不同的数字? 求并集
set1 = set(li1)
set2 = set(li2)
s1 = set1 | set2
print(len(s1))
print(s1)
# 2. 2组数中,不重复得有几个?分别是什么? 求对等差分
s2 = set1 ^ set2
print(len(s2))
print(s2)
# 3. 2组数中,重复的有几个?分别是什么? 求交集
s3 = set1 & set2
print(len(s3))
print(s3)