集合

2022/3/10 Python 基础

  集合是一个 无序不重复 的序列。可以使用 {} 来创建,也可使用或set来将其他数据强制转换为集合。例如:

Set = {1, 3, 4, 'You', 'Me'}
1

注意

  1. 集合内的元素除了单元素之外仅支持元组。列表、字典、集合等其他类型的元素都会导致集合创建失败。

  2. 创建空集合必须使用set,使用{}创建的是空字典。

# 访问

  由于集合是一个无序不重复的序列,集合不能通过索引来访问。因此,可以通过循环获得集合中的元素:

Set = {1, 3, 4, 'You', 'Me'}
for ELE in Set:
    print('元素:', ELE)
1
2
3

执行结果:

元素:1

元素:3

元素:4

元素:You

元素:Me

提示

可将集合转为列表或元组,然后利用索引访问元素。

# 添加

  添加一个元素:

Set = {1, 3, 4, 'You', 'Me'}
Set.add('Luo')
print(Set)
1
2
3

执行结果:{1, 3, 4, 'Luo', 'You', 'Me'}

  添加多个元素:

Set = {1, 3, 4, 'You', 'Me'}
ADD1 = [2, 6]
ADD2 = (5, 7)
ADD3 = {8, 9}
# 添加一个列表、元组或集合
Set.update(ADD1, ADD2, ADD3)
print(Set)
1
2
3
4
5
6
7

执行结果:{1, 2, 3, 4, 5, 6, 7, 8, 9, 'You', 'Me'}

# 剔除

  剔除一个元素:

Set = {1, 3, 4, 'You', 'Me'}
Set.remove(3) # 或 Set.discard(3)
print(Set)
1
2
3

执行结果:{1, 4, 'You', 'Me'}

# 交集

  取两个集合都含有的元素:

Set1 = {1, 3, 4, 'You', 'Me'}
Set2 = {1, 3, 4, 'Luo'}
Set = Set1 & Set2 # 或 Set = Set1.intersection(Set2)
print(Set)
1
2
3
4

执行结果:{1, 3, 4}

# 并集

  取两个集合的所有元素:

Set1 = {'You', 'Me'}
Set2 = {1, 3, 4, 'Luo'}
Set = Set1 | Set2 # 或 Set = Set1.union(Set2)
print(Set)
1
2
3
4

执行结果:{1, 3, 4, 'Luo', 'You', 'Me'}

# 补集

  取集合 1 中不含集合 2 的元素:

Set1 = {1, 3, 4, 'You', 'Me'}
Set2 = {1, 3, 4, 'Luo'}
Set = Set1 - Set2 # 或 Set = Set1.difference(Set2)
print(Set)
1
2
3
4

执行结果:{'You', 'Me'}

提示

相对补集(差集):Set2 不为 Set1 的子集。

绝对补集:Set2 为 Set1 的子集。

# 非交集

  取集合 1 中有但集合 2 中没有 和 集合 2 中有但集合 1 中没有的所有元素的总和:

Set1 = {1, 3, 4, 'You', 'Me'}
Set2 = {1, 3, 4, 'Luo'}
Set = Set1 ^ Set2 # 或 Set = Set1.symmetric_difference(Set2)
print(Set)
1
2
3
4

执行结果:{'Luo', 'You', 'Me'}

# 运算

方法 描述 示例 结果
len 取集合长度 len({1, 2}) 2
isdisjoint 两个集合是否不相交 {1, 2}.isdisjoint({2, 3}) False
issubset 集合 1 是否为集合 2 的子集 {1, 2}.issubset({1, 2, 3}) True
issuperset 集合 2 是否为集合 1 的子集 {1, 2, 3}.issuperset({2, 3}) True

# 集合解析式

  与列表解析式类似,集合解析式是将一个可迭代对象(如列表)转换成集合的工具。示例:

Set = {i for i in range(10000000)}
1