2.7 Python 基础 - 集合

71 阅读4分钟

在Python中,集合(Set)是一种无序的、不包含重复元素的数据结构。集合提供了一种快速的方式来存储唯一的元素集合,并进行集合运算,如并集、交集、差集等。

集合的定义

集合可以通过花括号 {} 或者 set() 函数来创建。例如:

my_set = {1, 2, 3}
my_set2 = set([1, 2, 3])

集合的特点

  1. 唯一性:集合中的元素都是唯一的,不允许重复。
  2. 无序性:集合中的元素没有特定的顺序。

注意事项

定义空值

在Python中,定义空的集合、列表、元组和字典的方式如下:

empty_set = set()
empty_list = []
empty_tuple = ()
empty_dict = {}

添加和删除元素

  • 添加元素:使用 add() 方法添加元素到集合中。
  • 删除元素:使用 remove()discard() 方法删除元素。remove() 会抛出错误,如果元素不存在;而 discard() 不会。
my_set.add(4)  # 添加元素4
my_set.remove(2)  # 删除元素2
my_set.discard(5)  # 删除元素5,如果不存在不报错

集合的运算

集合运算是处理集合数据时非常重要的一部分,Python提供了多种集合运算的方法,包括交集、并集、差集和对称差集。以下是对这些运算的详细介绍:

交集(Intersection)

交集是指两个或多个集合中共有的元素组成的集合。在Python中,可以使用 & 运算符或 intersection() 方法来获取两个集合的交集。

set_a = {1, 2, 3}
set_b = {2, 3, 4}

# 使用 & 运算符
intersection_ab = set_a & set_b
print(intersection_ab)  # 输出:{2, 3}

# 使用 intersection() 方法
intersection_ab_method = set_a.intersection(set_b)
print(intersection_ab_method)  # 输出:{2, 3}

并集(Union)

并集是指将两个或多个集合中的所有元素合并在一起,但不包含重复元素的集合。在Python中,可以使用 | 运算符或 union() 方法来获取两个集合的并集。

# 使用 | 运算符
union_ab = set_a | set_b
print(union_ab)  # 输出:{1, 2, 3, 4}

# 使用 union() 方法
union_ab_method = set_a.union(set_b)
print(union_ab_method)  # 输出:{1, 2, 3, 4}

差集(Difference)

差集是指在一个集合中但不在另一个集合中的元素组成的集合。在Python中,可以使用 - 运算符或 difference() 方法来获取两个集合的差集。

# 使用 - 运算符
difference_ab = set_a - set_b
print(difference_ab)  # 输出:{1}

# 使用 difference() 方法
difference_ab_method = set_a.difference(set_b)
print(difference_ab_method)  # 输出:{1}

对称差集(Symmetric Difference)

对称差集是指在一个集合中但不在两个集合的交集中的元素组成的集合。在Python中,可以使用 ^ 运算符或 symmetric_difference() 方法来获取两个集合的对称差集。

# 使用 ^ 运算符
symmetric_difference_ab = set_a ^ set_b
print(symmetric_difference_ab)  # 输出:{1, 4}

# 使用 symmetric_difference() 方法
symmetric_difference_ab_method = set_a.symmetric_difference(set_b)
print(symmetric_difference_ab_method)  # 输出:{1, 4}

集合运算的高级用法

除了基本的集合运算,Python还允许你一次性对多个集合进行运算。例如,你可以使用 union() 方法来获取多个集合的并集,或者使用 intersection() 方法来获取多个集合的交集。

set_c = {3, 4, 5}
# 多个集合的并集
union_multiple = set_a.union(set_b, set_c)
print(union_multiple)  # 输出:{1, 2, 3, 4, 5}

# 多个集合的交集
intersection_multiple = set_a.intersection(set_b, set_c)
print(intersection_multiple)  # 输出:{3}

注意事项

  • 集合运算的结果总是一个新的集合,原始集合不会被修改。
  • 集合运算符(如 &, |, -, ^)是不可交换的,即 set_a & set_b 可能不等于 set_b & set_a,但通常情况下,对于集合来说这是相等的。
  • 使用 update() 方法可以一次性将另一个集合的元素添加到当前集合中,相当于并集操作,但会修改原始集合。
set_a.update(set_b)
print(set_a)  # 输出:{1, 2, 3, 4}

集合的长度

可以使用 len() 函数来获取集合中元素的数量。

length = len(my_set)

集合与for循环

集合可以与 for 循环结合使用,遍历集合中的所有元素。

for element in my_set:
    print(element)

集合的成员检查

使用 in 关键字可以检查元素是否存在于集合中,这种检查效率高且速度快。

if 1 in my_set:
    print("1 is in the set")

集合与其他数据类型的转换

  • 集合转列表:使用 list() 函数。
  • 集合转元组:使用 tuple() 函数。
  • 列表、元组转集合:直接使用 set() 函数。
list_from_set = list(my_set)
tuple_from_set = tuple(my_set)
set_from_list = set([1, 2, 3])

结语

集合是Python中非常有用的数据结构之一,特别适合于需要快速查找和集合运算的场景。通过本文的介绍,你应该对Python中的集合有了基本的了解,并且能够开始在你的代码中使用它们了。记住,集合是无序的,并且元素唯一,这使得它们在处理不重复数据时非常高效。