0%

set 数据类型

简介

  • set 数据类型相关学习笔记

python3 set数据类型 详解

在 Python 中,set(集合)是一种无序不重复可变的数据类型。集合是基于哈希表实现的,它的特点是快速查找、去重和支持集合运算。集合广泛用于去除重复元素、数学集合运算以及作为字典的键等场景。

1. 创建集合

集合可以通过大括号 {}set() 函数来创建。需要注意,创建一个空集合时,必须使用 set(),因为 {} 会创建一个空字典。

1
2
3
4
5
6
7
8
9
10
11
# 创建一个非空集合
my_set = {1, 2, 3, 4, 5}

# 使用 set() 创建集合
my_set2 = set([1, 2, 3, 4])

# 创建一个空集合
empty_set = set()

# 集合中的元素可以是任意不可变的数据类型
mixed_set = {1, "apple", 3.14, (1, 2)} # 注意:集合中不能包含可变类型(如列表)

2. 集合的基本特性

  • 无序性:集合中的元素没有固定的顺序,因此不能通过索引访问元素。
  • 不重复:集合自动去重,重复的元素在集合中只保留一个。
  • 可变性:集合是可变的,可以添加、删除元素。
1
2
3
4
5
6
7
8
9
10
my_set = {1, 2, 3, 4, 5}
my_set.add(6) # 添加元素
print(my_set) # 输出: {1, 2, 3, 4, 5, 6}

my_set.remove(3) # 移除元素
print(my_set) # 输出: {1, 2, 4, 5, 6}

# 集合自动去重
my_set.add(2)
print(my_set) # 输出: {1, 2, 4, 5, 6}(2 已存在,不会被重复添加)

3. 访问集合中的元素

集合是无序的,因此不能像列表或元组那样通过索引直接访问元素。但可以使用循环或者集合的其他方法进行遍历。

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

# 遍历集合
for item in my_set:
print(item)

4. 常用集合方法

4.1 add()

向集合中添加单个元素。如果元素已存在,add() 不会做任何操作。

1
2
3
my_set = {1, 2, 3}
my_set.add(4) # 添加元素 4
print(my_set) # 输出: {1, 2, 3, 4}

4.2 remove()

删除集合中的指定元素。如果元素不存在,remove() 会抛出 KeyError

1
2
3
my_set = {1, 2, 3}
my_set.remove(2) # 删除元素 2
print(my_set) # 输出: {1, 3}

4.3 discard()

remove() 类似,但如果元素不存在,不会抛出错误。

1
2
3
my_set = {1, 2, 3}
my_set.discard(4) # 尝试删除不存在的元素,不会报错
print(my_set) # 输出: {1, 2, 3}

4.4 pop()

删除并返回集合中的一个元素(由于集合是无序的,删除的元素是随机的)。

1
2
3
4
my_set = {1, 2, 3}
removed_item = my_set.pop()
print(removed_item) # 输出: 删除的元素(可能是 1, 2 或 3)
print(my_set) # 输出: 剩余的集合元素

4.5 clear()

清空集合中的所有元素。

1
2
3
my_set = {1, 2, 3}
my_set.clear()
print(my_set) # 输出: set()(空集合)

4.6 copy()

返回集合的一个浅拷贝。

1
2
3
my_set = {1, 2, 3}
copied_set = my_set.copy()
print(copied_set) # 输出: {1, 2, 3}

5. 集合运算

5.1 union()|(并集)

返回两个集合的并集,即包含两个集合中所有元素的集合。

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

5.2 intersection()&(交集)

返回两个集合的交集,即只包含两个集合中共同存在的元素。

1
2
3
4
set1 = {1, 2, 3}
set2 = {3, 4, 5}
intersection_set = set1.intersection(set2) # 或者:intersection_set = set1 & set2
print(intersection_set) # 输出: {3}

5.3 difference()-(差集)

返回在第一个集合中存在而第二个集合中不存在的元素。

1
2
3
4
set1 = {1, 2, 3}
set2 = {3, 4, 5}
difference_set = set1.difference(set2) # 或者:difference_set = set1 - set2
print(difference_set) # 输出: {1, 2}

5.4 symmetric_difference()^(对称差集)

返回两个集合中不重复的元素,即两个集合的差集的并集。

1
2
3
4
set1 = {1, 2, 3}
set2 = {3, 4, 5}
symmetric_difference_set = set1.symmetric_difference(set2) # 或者:symmetric_difference_set = set1 ^ set2
print(symmetric_difference_set) # 输出: {1, 2, 4, 5}

5.5 子集与超集

  • issubset():检查一个集合是否是另一个集合的子集。
  • issuperset():检查一个集合是否是另一个集合的超集。
1
2
3
4
set1 = {1, 2, 3}
set2 = {1, 2, 3, 4, 5}
print(set1.issubset(set2)) # 输出: True
print(set2.issuperset(set1)) # 输出: True

5.6 isdisjoint()

检查两个集合是否没有交集(即是否是不相交的)。

1
2
3
4
5
6
set1 = {1, 2, 3}
set2 = {4, 5, 6}
print(set1.isdisjoint(set2)) # 输出: True

set3 = {2, 3}
print(set1.isdisjoint(set3)) # 输出: False

6. 集合的应用场景

  • 去重:使用集合可以轻松地去除重复元素。

    1
    2
    3
    my_list = [1, 2, 2, 3, 4, 4, 5]
    my_set = set(my_list) # 去重
    print(my_set) # 输出: {1, 2, 3, 4, 5}
  • 数学集合运算:集合可以方便地进行交集、并集、差集等运算。

  • 作为字典的键:由于集合是可变的,它本身不能作为字典的键,但frozenset(冻结集合)是不可变的,可以作为字典的键。

    1
    2
    my_dict = {frozenset([1, 2, 3]): "value"}
    print(my_dict)
  • 集合测试:可以快速检测某个元素是否存在于集合中,利用集合的哈希结构,查找操作的时间复杂度为 O(1)。


7. 总结

特性 描述
无序 元素没有固定顺序,不能使用索引
不重复 集合中的元素不能重复
可变 集合内容可以修改
支持集合运算 提供并集、交集、差集等运算
基于哈希表 查找元素的时间复杂度为 O(1)

集合在 Python 中非常强大,尤其适合用于去重、快速查找和数学集合运算等场景。通过集合运算,我们可以

感谢老板支持!敬礼(^^ゞ