集合(Set)

创建集合

  • 使用花括号{}(注意:空集合不能用{}

# 创建包含元素的集合
my_set = {1, 2, 3, 'hello', (4, 5)}
print(my_set)  # 输出顺序可能与输入不同,例如 {1, 2, 3, (4, 5), 'hello'}

# 创建空集合
empty_set = set()
print(type(empty_set))   # <class 'set'>
print(empty_set)         # set()
  • 使用set()构造函数:

# 从字符串创建 (字符去重)
char_set = set("hello")
print(char_set)  # {'l', 'o', 'e', 'h'} 或类似顺序

# 从列表创建 (元素去重)
list_set = set([1, 2, 2, 3, 3, 3])
print(list_set)  # {1, 2, 3}

# 从元组创建
tuple_set = set((1, 2, 3))
print(tuple_set) # {1, 2, 3}

# 创建空集合
empty_set = set()

基本操作

添加元素

删除元素:

  • remove(element):删除指定元素,如果元素不存在,会抛出 KeyError 异常

  • discard(element): 删除指定元素。如果元素不存在,不会抛出异常,静默处理。

  • pop(): 随机移除并返回集合中的一个元素。因为集合无序,所以无法预测移除哪个元素。 如果集合为空,则抛出 KeyError

  • clear(): 清空集合,使其变为空集合。

成员检查

使用 innot in 操作符。这是集合非常高效的操作,时间复杂度接近 O(1)。

获取集合大小

集合运算

集合支持丰富的数学集合运算,这些运算可以使用方法或操作符。

  • 并集(Union):包含两个集合中所有不重复的元素。

  • 交集(Intersection):包含同时存在于两个集合中的元素。

  • 差集(Difference):包含在第一个集合中但不在第二个集合中的元素。

  • 对称差集(Symmetric Difference):包含在两个集合中但不同时存在于两者中的元素。

  • 子集与超集判断

    • set1.issubset(set2)set1 <= set2: 判断 set1 是否是 set2 的子集。

    • set1.issuperset(set2)set1 >= set2: 判断 set1 是否是 set2 的超集。

    • set1 < set2: 判断 set1 是否是 set2真子集(子集且不相等)。

    • set1 > set2: 判断 set1 是否是 set2真超集(超集且不相等)。

  • 不相交判断:如果两个集合没有交集(交集为空),返回 True

集合推导式

类似于列表推导式,用于简洁地创建集合。

不可变集合

  • frozensetset的不可变版本。

  • 创建后,使其元素不能被修改(不能添加、删除元素)。

  • 因为不可变,所以frozenset本身是可哈希的,这意味着它可以作为字典的键或另一个集合的元素,而普通set不行。

  • 创建方式:frozenset(iterable)

  • 支持除了修改操作(addremove等)之外的所有集合运算(unionintersectionin等)

最后更新于