【Python入门第九讲】 集合(set)

2024-01-31 08:20:13 浏览数 (2)

集合(Set)是 Python 中的一种基本数据结构,它是由不重复元素组成的无序集合。集合对象支持多种数学运算,如并集、交集、差集和对称差等。

集合的特点包括:

  1. 无序性: 集合中的元素没有顺序,不能通过索引访问或修改。
  2. 唯一性: 集合中的元素是唯一的,不会出现重复。
  3. 可变性: 集合是可变的,可以添加或删除元素,但集合本身是可变的,不可作为集合的元素。

集合的创建

使用大括号 {} 或者 set() 函数可以创建一个集合。例如:

要定义一个空集合,可以使用 set() 方法,如下所示:

代码语言:python代码运行次数:0复制
empty_set = set()

使用大括号 {} 可以定义一个非空集合。如下所示:

代码语言:python代码运行次数:0复制
non_empty_set = {1, 2, 3, 4, 5}

集合的特性

集合的特性之一是其元素的唯一性。在集合中,不允许存在重复的元素,每个元素都是唯一的。这意味着无论你添加多少次相同的元素,集合中都只会保留一个副本。

集合中元素的唯一性:

代码语言:python代码运行次数:0复制
# 创建一个包含重复元素的列表
my_list = [1, 2, 3, 4, 5, 1, 2, 3]

# 使用 set() 方法将列表转换为集合
my_set = set(my_list)

# 打印集合
print("集合:", my_set)

除了元素的唯一性之外,集合的另一个重要特性是元素的无序存储。这意味着集合中的元素没有特定的顺序,它们不像列表或元组那样按照索引有序存储。

无序存储的特性使得集合更适合用于快速检查成员资格和去除重复元素,但不适合需要按照索引顺序访问元素的情况。

集合的无序存储特性:

代码语言:python代码运行次数:0复制
# 创建一个包含多个元素的集合
my_set = {3, 1, 4, 1, 5, 9, 2, 6, 5}

# 打印集合
print("集合:", my_set)

集合基础方法

add()

向集合中添加元素。

代码语言:python代码运行次数:0复制
my_set = {1, 2, 3}
my_set.add(4)
print(my_set)  # 输出: {1, 2, 3, 4}

remove()

从集合中移除指定元素。如果元素不存在,会引发 KeyError 错误。

代码语言:python代码运行次数:0复制
my_set.remove(3)
print(my_set)  # 输出: {1, 2, 4}

discard()

从集合中移除指定元素。如果元素不存在,不会引发错误。

代码语言:python代码运行次数:0复制
my_set.discard(5)
print(my_set)  # 输出: {1, 2, 4}

pop()

随机删除并返回集合中的一个元素。如果集合为空,会引发 KeyError 错误。

代码语言:python代码运行次数:0复制
popped_element = my_set.pop()
print(popped_element)  # 输出: 1

clear()

清空集合中的所有元素。

代码语言:python代码运行次数:0复制
my_set.clear()
print(my_set)  # 输出: set()

update()

将其他集合或可迭代对象中的元素添加到集合中。

代码语言:python代码运行次数:0复制
my_set.update([5, 6, 7])
print(my_set)  # 输出: {5, 6, 7}

copy()

返回集合的一个浅拷贝(副本)。

代码语言:python代码运行次数:0复制
new_set = my_set.copy()
print(new_set)  # 输出: {5, 6, 7}

这些是一些常用的集合基础方法,使用它们有效地操作集合中的元素。

集合内置方法

Python 中的 set 类提供了集合操作相关的内置方法,集合中还提供了部分操作符号与之对应,下面按照类中方法定义的顺序演示。

集合内置函数与集合操作符对于关系可参照下表:

方法

符号

说明

difference

-

计算差集

intersection

&

计算交集

issubset

<

子集判断

symmetric_difference

^

计算对称差集

union

|

计算并集

difference()

返回一个新集合,包含当前集合中有但其他集合中没有的元素。

代码语言:python代码运行次数:0复制
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
result = set1.difference(set2)
print(result)  # 输出: {1, 2}

intersection()

返回一个新集合,包含同时在两个集合中的元素。

代码语言:python代码运行次数:0复制
result = set1.intersection(set2)
print(result)  # 输出: {3, 4}

issubset()

判断当前集合是否为另一个集合的子集。

代码语言:python代码运行次数:0复制
subset = {1, 2}
print(subset.issubset(set1))  # 输出: True

symmetric_difference()

返回一个新集合,包含所有只在一个集合中出现的元素。

代码语言:python代码运行次数:0复制
result = set1.symmetric_difference(set2)
print(result)  # 输出: {1, 2, 5, 6}

union()

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

代码语言:python代码运行次数:0复制
result = set1.union(set2)
print(result)  # 输出: {1, 2, 3, 4, 5, 6}

常用方法

去重操作:

代码语言:python代码运行次数:0复制
lst = [1, 2, 3, 4, 1, 2, 5]
unique_set = set(lst)
print(unique_set)  # 输出: {1, 2, 3, 4, 5}

成员关系测试:

代码语言:python代码运行次数:0复制
s = {1, 2, 3, 4, 5}
print(3 in s)  # 输出: True
print(6 not in s)  # 输出: True

数学运算:

代码语言:python代码运行次数:0复制
s1 = {1, 2, 3}
s2 = {3, 4, 5}
print(s1.union(s2))  # 输出: {1, 2, 3, 4, 5}
print(s1.intersection(s2))  # 输出: {3}

标记与过滤:

代码语言:python代码运行次数:0复制
data = {1, 2, 3, 4, 5}
marked = {2, 3}
filtered_data = data - marked
print(filtered_data)  # 输出: {1, 4, 5}

缓存与索引:

代码语言:python代码运行次数:0复制
data = {1, 2, 3, 4, 5}
print(3 in data)  # 输出: True

网络数据处理:

代码语言:python代码运行次数:0复制
ip_addresses = {'192.168.1.1', '192.168.1.2', '192.168.1.3'}
trusted_ips = {'192.168.1.1', '192.168.1.2'}
unauthorized_ips = ip_addresses - trusted_ips
print(unauthorized_ips)  # 输出: {'192.168.1.3'}

数据库查询结果处理:

代码语言:python代码运行次数:0复制
db_results = {'user1', 'user2', 'user3', 'user4', 'user5'}
admins = {'user1', 'user2'}
regular_users = db_results - admins
print(regular_users)  # 输出: {'user3', 'user4', 'user5'}

这些示例展示了集合在不同情境下的应用,利用集合的特性和方法,可以更加方便地处理数据,提高代码的效率。

我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

0 人点赞