+关注继续查看

# 八、Python 中一个无序且元素唯一的数据类型，它是集合。

## 8.1 集合是啥

### 8.1.1 集合的声明

my_set = {元素1,元素2,...}

my_set = {1, 2, 3, 3, 10, 4, 5, 6}

print(my_set)

my_set = {1, 2, 3, [3, 10, 4, 5, 6]}
# 错误提示：TypeError: unhashable type: 'list'
print(my_set)

### 8.1.2 set 函数定义集合

my_dict = {}
my_set = set()

# 空字典
print(type(my_dict))
# 空集合
print(type(my_set))

set 将字符串转换成集合

set 函数类似一个强制转换，可以将其它类型的转换成集合。

my_set = set("my name is xiangpica")
print(my_set)

my_tuple = ("apple", "orange", "orange", "pear", "banana", "food")
my_set = set(my_tuple)
print(my_set)

## 8.2 集合的操作

&交集
\ 并集
-差集
^对称差集

### 8.2.1 交集（intersection）

my_set1 = {"apple", "orange", "pear", "banana", "food"}
my_set2 = {"apple", "orange", "pear"}

both = my_set1 & my_set2
print(both)

my_set1 = {"apple", "orange", "pear", "banana", "food"}
my_set2 = {"apple", "orange", "pear"}

both = my_set1.intersection(my_set2)
print(both)

### 8.2.2 并集（union）

my_set1 = {"apple", "orange", "pear", "banana", "food"}
my_set2 = {"apple", "orange", "pear"}

both = my_set1 | my_set2
print(both)

my_set1 = {"apple", "orange", "pear", "banana", "food"}
my_set2 = {"apple", "orange", "pear"}

both = my_set1.union(my_set2)
print(both)

### 8.2.3 差集（difference）

my_set1 = {"apple", "orange", "pear", "banana", "food"}
my_set2 = {"apple", "orange", "pear", "grape"}
# 求解属于 A，但不属于 B 的元素
dif1 = my_set1 - my_set2
print(dif1)
# 求解属于 B，但不属于 A 的元素
dif2 = my_set2 - my_set1
print(dif2)

### 8.2.4 对称差集（symmetric difference）

A 与 B 两个集合，如果想要获得属于 A 或者 B 集合的元素，但又不要属于 A 且属于 B 的元素，这时就是对称差集的应用场景了。

my_set1 = {"apple", "orange", "pear", "banana", "food"}
my_set2 = {"apple", "orange", "pear", "grape"}

dif = my_set1 ^ my_set2
print(dif)

## 8.3 集合的方法

### 8.3.1 集合的增删

my_set.add(新增元素)

my_set = {"apple", "orange", "pear", "grape"}
print(my_set)

remove 方法可以删除集合中元素，前提是该元素在集合中，如果删除不存在的元素报错。

my_set = {"apple", "orange", "pear", "grape"}

my_set.remove("apple")

print(my_set)
# 第二次删除报错 因为 apple 已经不在集合中
my_set.remove("apple")
print(my_set)

my_set = {"apple", "orange", "pear", "grape"}

print(my_set)

print(my_set)

pop 方法为随机删除一个元素，被删除的元素会被返回，即可以用一个变量接收被删除的元素，如果集合为空使用 pop 会报错。

my_set1 = {"apple", "orange", "pear", "grape"}

# pop 方法随机删除一个元素，将被删除的元素返回
var = my_set1.pop()
print(var)

# 空集合使用 pop 方法报错
my_set2 = set()
var = my_set2.pop()
print(var)

clear 方法删除集合内的所有元素

my_set1 = {"apple", "orange", "pear", "grape"}

my_set1.clear()
print(my_set1)

### 8.3.1 集合的其它方法

isdisjoint 方法用于判断两个集合是否存在相同元素，没有返回 True，否则返回 False。

my_set1 = {"apple", "orange", "pear", "grape"}
my_set2 = {"banana", "watermelon"}

# 两个集合没有相同元素
ret_bool = my_set1.isdisjoint(my_set2)
print(ret_bool) # 返回 True

my_set1 = {"apple", "orange", "pear", "grape"}
my_set2 = {"banana", "watermelon","apple"}

# 两个集合有相同元素
ret_bool = my_set1.isdisjoint(my_set2)
print(ret_bool)

issubset 该方法用于判断一个集合是否是另一个集合的子集，确定是返回 True，否则返回 False。

my_set1 = {"apple", "orange", "pear", "grape"}
my_set2 = {"banana", "watermelon"}

# 第二个集合不是第一个集合的子集
ret_bool = my_set2.issubset(my_set1)
print(ret_bool) # 返回 False

# 第二个集合是第一个集合的子集
my_set1 = {"apple", "orange", "pear", "grape"}
my_set2 = {"orange","apple"}

ret_bool = my_set2.issubset(my_set1)
print(ret_bool) # 返回 True

issuperset 方法用于判断一个集合是否是另一个集合的父集，与 issubset 恰好相反，具体实现由大家自行完成。

update 方法用于将一个集合的元素添加到另一个集合内，语法格式如下：

被添加的集合A.update(待添加的集合B)

my_set1 = {"apple", "orange", "pear", "grape"}
my_set2 = {"banana", "watermelon"}

my_set1.update(my_set2)
print(my_set1)

• intersection_update 此方法用于求多个集合的交集
• difference_update 删除集合内与另一集合重复的元素
• symmetric_difference_update 类似对称差集的用法

## 8.6 这篇博客的总结

🍂🍂🍂🍂🍂🍂🍂

10061 0

11605 0

13874 0
windows server 2008阿里云ECS服务器安全设置

9157 0

7360 0

4498 0

22378 0
+关注

63

1

《2021云上架构与运维峰会演讲合集》

《零基础CSS入门教程》

《零基础HTML入门教程》