[Python基础] 集合数据结构

Posted by Chase Shen on 2022-01-29
Estimated Reading Time 3 Minutes
Words 914 In Total
Viewed Times

集合(Set)是 Python 中的一种无序、可变的数据结构,用于存储不重复的元素。集合使用花括号{}定义,元素之间用逗号 , 分隔。

1. 集合的特点

  1. 唯一性
    集合中的元素是唯一的,即集合中不允许存在重复的元素。

  2. 无序性
    集合中的元素没有固定的顺序,每次访问元素的顺序可能不同。

  3. 可变性
    集合是可变的,即可以添加、删除和更新元素。

2. 创建集合

创建集合有三种常用的方法:字面量语法、构造器语法和推导式语法:

1. 字面量语法

  • 使用花括号{}来定义集合,元素之间用逗号,分隔。
  • 在字面量语法中,可以使用一对空的花括号{}来表示空集合。
1
2
3
# 包含多个元素的集合
my_set = {1, 2, 3, 'a', 'b', 'c'}
empty_set = {}

2. 构造器语法

  • 使用set()构造函数来创建集合,可以接受一个可迭代对象作为参数,将可迭代对象中的元素加入到集合中。
  • 构造器语法通常用于从其他可迭代对象(如列表、元组等)中创建集合。
1
2
3
another_set = set([4, 5, 6])
# 空集合
empty_set = set()

3. 推导式语法

集合推导式允许在一行代码中根据某种规则创建集合。其语法与列表推导式类似,但使用花括号{}来表示集合。

1
2
my_set = {x for x in range(10) if x % 2 == 0}
my_set2 = {num for num in range(1, 100) if num % 3 == 0 or num % 5 == 0}

在上述示例中,通过集合推导式创建了一个包含 0 到 9 中所有偶数的集合。

总的来说,这三种方法都可以用来创建集合,选择哪种方法取决于个人偏好以及特定的使用场景。通常情况下,字面量语法和构造器语法是更常用和更直观的方法,而推导式语法则更适用于需要根据特定规则生成集合的情况。

2. 集合的用法

添加元素:

1
2
my_set.add(4)   #向集合中添加单个元素
my_set.update([5, 6, 7]) #向集合中添加多个元素

删除元素:

1
2
3
4
5
if 4 in my_set:
my_set.remove(4) #删除集合中的指定元素,如果元素不存在会抛出 KeyError 错误

my_set.discard(5) #删除集合中的指定元素,如果元素不存在则不会抛出错误
my_set.pop() #移除并返回集合中的一个任意元素

集合运算:
集合支持并集、交集、差集和对称差等运算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
set1 = {1, 2, 3}
set2 = {3, 4, 5}

# 并集
union_set = set1.union(set2) #输出:{1, 2, 3, 4, 5}
union_set = set1 | set2

# 交集
intersection_set = set1.intersection(set2) #输出:{3}
intersection_set = set1 & set2

# 差集
difference_set = set1.difference(set2) #输出:{1, 2}
difference_set = set1 - set2

# 对称差
symmetric_difference_set = set1.symmetric_difference(set2) #输出:{1, 2, 4, 5}
symmetric_difference_set = set1 ^ set2

# 判断子集和超集
print(set2 <= set1)
# print(set2.issubset(set1))
print(set3 <= set1)
# print(set3.issubset(set1))
print(set1 >= set2)
# print(set1.issuperset(set2))
print(set1 >= set3)
# print(set1.issuperset(set3))

上面的代码中我们对集合进行运算的时候可以调用集合对象的方法,也可以直接使用对应的运算符,例如&运算符跟intersection方法的作用就是一样的,但是使用运算符让代码更加直观。

3. 不可哈希性

集合本身是可变的,因此集合对象本身是不可哈希的,即不能作为字典的键或者其他集合的元素。


如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !