基础篇_009_set集合
定义:由不同元素组成的、一组无序排列的、可hash值的数据类型。这一点倒是和字典中的key很相似。
----集合的创建:
1. 直接创建:s = {1, 2, 3, 4}。结合所用的容器符号和字典所用的容器符号一样,但是创建的形式不同,不需要键值对。
2. 间接创建:
--set(iterable):直接向函数中传入可迭代对象即可,创建一个可更改的集合,eg:===》
1 string = "simba"
2 s = set(string)
3 # 输出结果为:{'a', 'i', 'm', 's', 'b'},也间接证明了集合的无序性
4 print(s)
--frozenset(iterable):创建一个不可改变的集合,输出集合为:frozenset({......})
----集合的关系运算:交叉并补
例题:给你两组数据:data_1 = ["simba", "vivian", "lhf", "Yangtze"]和data_2 = ["vivian", "lhf"],让你找两组数据相同的值。
在没有接触到集合以前,你肯定会这样写 ===》
data_1 = ["simba", "vivian", "lhf", "Yangtze"]
data_2 = ["vivian", "lhf"]
data_intersection = []
for d_1 in data_1:
if d_1 in data_2:
data_intersection.append(d_1)
print(data_intersection) # 输出结果为:['vivian', 'lhf']
但是现在,你已经接触集合了,集合就会帮你完成一系列的关系运算 ===》
1 data_1 = {"simba", "vivian", "lhf", "Yangtze"}
2 data_2 = {"vivian", "lhf", "wpq"}
3 # 2个集合求交集
4 data_intersection = data_1.intersection(data_2)
5 print(data_intersection) # 输出结果为:{'lhf', 'vivian'}
6 print(data_1 & data_2) # 输出结果为:{'lhf', 'vivian'}
7 # 2个集合求并集
8 data_union = data_1.union(data_2)
9 print(data_union) # 输出结果为:{'vivian', 'lhf', 'simba', 'Yangtze', 'wpq'}
10 print(data_1 | data_2) # 输出结果为:{'vivian', 'lhf', 'simba', 'Yangtze', 'wpq'}
11 # 2个集合求差集
12 data_difference = data_1.difference(data_2)
13 print(data_difference) # 输出结果为:{'Yangtze', 'simba'}
14 print(data_1 - data_2) # 输出结果为:{'Yangtze', 'simba'}
15 # 2个集合求交叉补集
16 data_symmetric_difference = data_1.symmetric_difference(data_2)
17 print(data_symmetric_difference) # 输出结果为:{'wpq', 'simba', 'Yangtze'}
18 print(data_1 ^ data_2) # 输出结果为:{'wpq', 'simba', 'Yangtze'}
当然,这里面还有difference_update、intersection_update、symmetric_difference_update,他们的作用就是做完相关的操作之后立即更新调用的集合对象的数据(覆盖)。
----集合的内置方法
--3种删除 ===》
1. pop():从集合中随机删除一个元素。
2. 若想删除指定元素,则必须用remove(value),若删除的东西不存在,则抛出异常。
3. 若想不抛出异常,则必须用discard(value),返回值为空。
--其他内置方法 ===》
1. isdisjoint(set) :判断两个集合是否为空交集。
2. issubset(set) :判断调用集合对象是否是传入集合对象的子集。对应的符号为:<(当然还有<=)
3. issuperset(set) :判断调用集合对象是否是传入集合对象的父集。对应的符号为:>(当然还有>=)
4. update(iterable):更新多个值,并覆盖调用的集合对象。相当于for循环调用add(hashable)。

浙公网安备 33010602011771号