【Python】Set

1 集合概述

集合(set)是一个无序的不重复元素序列,用于存储多个唯一的元素, 集合支持数学中的集合操作,如并集、交集、差集等。

1.1 集合的特点

无序:集合中的元素没有特定的顺序,因此不能通过索引访问元素。
唯一性:集合中的元素必须是唯一的,重复的元素会被自动去除。
可变性:集合本身是可变的,可以添加或删除元素,但集合中的元素必须是不可变类型(如数字、字符串、元组等)

1.2 集合适用场景

集合是一种无序且不重复的数据结构,适用于需要去除重复元素、进行数学集合运算等场景。集合支持多种操作和方法,可以帮助你高效地处理数据。如果需要一个专门用于存储唯一元素的集合,集合(set)是一个非常合适的选择。

2 集合的定义

2.1 使用花括号 {}构建集合

# 定义一个集合
fruits = {"apple", "banana", "cherry"}

2.2 使用 set() 构造函数

# 从列表创建集合
fruits = set(["apple", "banana", "cherry"])

3 集合的基本操作

3.1 添加元素

add(element):向集合中添加一个元素。

fruits = {"apple", "banana", "cherry"}
fruits.add("orange")
print(fruits)  # 输出:{'apple', 'banana', 'cherry', 'orange'}

update(elements):向集合中添加多个元素(可以是列表、元组、另一个集合等)

fruits = {"apple", "banana", "cherry"}
fruits.update(["orange", "grape"]) # 将列表元素更新入集合fruits

print(fruits)  # 输出:{'apple', 'banana', 'cherry', 'orange', 'grape'}

update() 方法注意事项

当使用 update() 方法时,传入的参数需要是一个可迭代对象(列表、元组、集合等)

  • 列表:将元素放在方括号 [] 中,列表元素被迭代添加至集合
  • 元组:将元素放在圆括号 () 中,元组元素被迭代添加至集合
  • 集合:将元素放在花括号 {} 中,集合元素被迭代添加至集合
fruits = {"apple", "banana", "cherry"}

# 使用列表作为参数
fruits.update(["orange", "grape"])
print(fruits)  # 输出:{'apple', 'banana', 'cherry', 'orange', 'grape'}

# 使用元组作为参数
fruits.update(("watermelon", "kiwi"))
print(fruits)  # 输出:{'apple', 'banana', 'cherry', 'orange', 'grape', 'watermelon', 'kiwi'}

# 使用另一个集合作为参数
more_fruits = {"mango", "pineapple"}
fruits.update(more_fruits)
print(fruits)  # 输出:{'apple', 'banana', 'cherry', 'orange', 'grape', 'watermelon', 'kiwi', 'mango', 'pineapple'}

add()注意事项

集合中的元素必须是不可变类型(如字符串、数字、元组等),而列表是可变类型,不能作为集合的元素。

fruits = {"apple", "banana", "cherry"}
fruits.add(["orange", "grape"])  # 注意:这会引发 TypeError,因为列表是可变的,不能作为集合的元素

# TypeError: unhashable type: 'list'
fruits = {"apple", "banana", "cherry"}
fruits.add(("orange", "grape"))  # 元组是不可变的,可以作为集合的元素
print(fruits) # {'apple', ('orange', 'grape'), 'cherry', 'banana'}

3.2 删除元素

remove(element):删除指定元素。如果元素不存在,会引发 KeyError

fruits = {"apple", "banana", "cherry"}
fruits.remove("banana")
print(fruits)  # 输出:{'apple', 'cherry'}

discard(element):删除指定元素。如果元素不存在,不会引发错误

fruits = {"apple", "banana", "cherry"}
fruits.discard("banana")
print(fruits)  # 输出:{'apple', 'cherry'}
fruits.discard("orange")  # 不会引发错误

pop():随机删除并返回一个元素(集合无序,无法指定删除哪个元素)

fruits = {"apple", "banana", "cherry"}
removed_fruit = fruits.pop()
print(removed_fruit)  # 输出:可能是 'apple'、'banana' 或 'cherry' 中的一个
print(fruits)         # 输出:剩下的两个元素

clear():清空集合

fruits = {"apple", "banana", "cherry"}
fruits.clear()
print(fruits)  # 输出:set()

4 集合运算

并集

并集:使用 union() 方法或 | 运算符,返回两个集合的所有元素(去重)

set1 = {1, 2, 3}
set2 = {3, 4, 5}
set3 = set1.union(set2)
print(set3)  # 输出:{1, 2, 3, 4, 5}
# 或使用 | 运算符
set3 = set1 | set2
print(set3)  # 输出:{1, 2, 3, 4, 5}

交集

交集:使用 intersection() 方法或 & 运算符,返回两个集合的公共元素

set1 = {1, 2, 3}
set2 = {3, 4, 5}
set3 = set1.union(set2)
print(set3)  # 输出:{1, 2, 3, 4, 5}
# 或使用 | 运算符
set3 = set1 | set2
print(set3)  # 输出:{1, 2, 3, 4, 5}

差集

差集:使用 difference() 方法或 - 运算符,返回第一个集合中有而第二个集合中没有的元素。

set1 = {1, 2, 3}
set2 = {3, 4, 5}
set3 = set1.difference(set2)
print(set3)  # 输出:{1, 2}
# 或使用 - 运算符
set3 = set1 - set2
print(set3)  # 输出:{1, 2}

对称差集

对称差集:使用 symmetric_difference() 方法或 ^ 运算符,返回两个集合中不共有的元素。

set1 = {1, 2, 3}
set2 = {3, 4, 5}
set3 = set1.symmetric_difference(set2)
print(set3)  # 输出:{1, 2, 4, 5}
# 或使用 ^ 运算符
set3 = set1 ^ set2
print(set3)  # 输出:{1, 2, 4, 5}

5 集合比较

issubset(other_set):判断当前集合是否是另一个集合的子集

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

issuperset(other_set):判断当前集合是否是另一个集合的超集

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

isdisjoint(other_set):判断两个集合是否没有交集

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

总结

方法描述
add(element)向集合中添加一个元素。
update(elements)向集合中添加多个元素(可以是列表、元组、另一个集合等)。
remove(element)删除指定元素。如果元素不存在,会引发 KeyError
discard(element)删除指定元素。如果元素不存在,不会引发错误。
pop()随机删除并返回一个元素。
clear()清空集合。
union(other_set)返回两个集合的并集。
intersection(other_set)返回两个集合的交集。
difference(other_set)返回两个集合的差集(第一个集合中有而第二个集合中没有的元素)。
symmetric_difference(other_set)返回两个集合的对称差集(两个集合中不共有的元素)。
issubset(other_set)判断当前集合是否是另一个集合的子集。
issuperset(other_set)判断当前集合是否是另一个集合的超集。
isdisjoint(other_set)判断两个集合是否没有交集。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值