【玩转python】入门篇day07-python数据类型-集合

Python中的集合(Set)是一个无序的、不包含重复元素的数据结构。它主要用于数学上的集合操作,如并集、交集、差集和对称差集等。集合的基本用途包括去重和关系测试。

1、集合的特性

  • 无序性:集合中的元素是无序的,这意呀着集合不支持索引操作。
  • 唯一性:集合中的元素是唯一的,不允许有重复的元素。
  • 可变性:集合是可变的,即可以在创建后添加或删除元素。

2、集合的创建

集合可以使用大括号 {} 创建,但需要注意的是,空集合不能使用 {}(这会创建一个空字典),而应该使用 set()。

# 创建一个空集合  
my_set = set()  
  
# 创建一个包含几个元素的集合  
my_set = {1, 2, 3, 4, 5}  
  
# 注意:集合中的元素是无序的  
print(my_set)  # 输出可能不是 {1, 2, 3, 4, 5},因为集合是无序的

3、集合的操作

3.1、添加元素

使用 .add() 方法可以向集合中添加一个元素。

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

3.2、删除元素

  • remove(element):如果元素存在于集合中,则将其移除。如果元素不存在,则抛出 KeyError。
  • discard(element):如果元素存在于集合中,则将其移除。如果元素不存在,则不执行任何操作。
  • pop():随机移除集合中的一个元素并返回它。如果集合为空,则抛出 KeyError。
my_set = {1, 2, 3, 4}  
my_set.remove(2)  
print(my_set)  # 输出: {1, 3, 4}  
  
my_set.discard(5)  # 5 不在集合中,不会抛出异常  
print(my_set)  # 输出: {1, 3, 4}  
  
pop_element = my_set.pop()  
print(pop_element)  # 输出集合中的一个随机元素  
print(my_set)  # 集合中少了一个元素

3.3、集合的运算

  • 并集:使用 | 运算符或 .union() 方法可以求两个集合的并集。
  • 交集:使用 & 运算符或 .intersection() 方法可以求两个集合的交集。
  • 差集:使用 - 运算符或 .difference() 方法可以求两个集合的差集(第一个集合中有但第二个集合中没有的元素)。
  • 对称差集:使用 ^ 运算符或 .symmetric_difference() 方法可以求两个集合的对称差集(存在于一个集合中但不同时存在于两个集合中的元素)。
set1 = {1, 2, 3, 4}  
set2 = {3, 4, 5, 6}  
  
print(set1 | set2)  # 并集: {1, 2, 3, 4, 5, 6}  
print(set1 & set2)  # 交集: {3, 4}  
print(set1 - set2)  # 差集: {1, 2}  
print(set1 ^ set2)  # 对称差集: {1, 2, 5, 6}

3.4、集合的其他方法

  • isdisjoint(other):如果两个集合没有交集,则返回 True。
  • issubset(other) 或 <=:如果集合是另一个集合的子集,则返回 True。
  • issuperset(other) 或 >=:如果集合是另一个集合的超集,则返回 True。
  • update(*others):用其他集合的元素更新集合,即求并集后赋值给原集合。
  • clear():移除集合中的所有元素。

集合是Python中一个非常有用的数据结构,它提供了快速的去重和集合运算功能。

4、集合和list的区别

集合(Set)和列表(List)是Python中两种不同类型的数据结构,它们之间存在多个显著的区别。以下是集合和列表之间区别的清晰归纳:

4.1 有序性

  • 列表(List):列表中的元素是有序的,即元素按照它们被插入的顺序进行存储。这意味着你可以通过索引(位置)来访问列表中的元素。
  • 集合(Set):集合中的元素是无序的,即元素存储的顺序是不确定的。因此,你不能通过索引来访问集合中的元素。

4.2 唯一性

  • 列表(List):列表中的元素可以重复,即列表中可以有多个相同的元素,每个元素都有一个唯一的索引。
  • 集合(Set):集合中的元素是唯一的,不允许有重复的元素。如果尝试向集合中添加一个已经存在的元素,该操作将不会改变集合。

4.3 表示方式

  • 列表(List):列表使用方括号 [] 来定义,元素之间用逗号分隔。例如:my_list = [1, 2, 2, 3, 4]。
  • 集合(Set):集合使用大括号 {} 来定义(但注意空集合不能使用 {},因为这会创建一个空字典,应该使用 set())。元素之间也用逗号分隔。例如:my_set = {1, 2, 3, 4}(注意集合会自动去除重复元素)。

4.4 用途

  • 列表(List):列表适合用于存储有序的、可能会重复的元素。它可以用于多种场景,如存储数据、快速访问数据(通过索引)、修改数据等。
  • 集合(Set):集合适合用于存储无序的、不重复的元素。它主要用于去重和集合运算(如并集、交集、差集和对称差集)。由于集合中的元素是唯一的,它还可以用于成员关系测试。

4.5 性能

  • 列表(List):列表在插入和删除元素时,特别是在列表的开头或中间插入元素时,可能需要移动其他元素,因此性能可能不是最优的。
  • 集合(Set):集合基于哈希表实现,因此在进行成员关系测试、添加和删除元素时通常具有更好的性能。但是,由于集合是无序的,因此不支持索引访问,这可能会影响某些操作的性能。

总结

  • 列表(List)是一种有序的数据结构,可以包含重复元素,适用于需要保持顺序和允许重复元素的情况。
  • 集合(Set)是一种无序的、不包含重复元素的数据结构,适用于需要快速查找元素和去除重复元素的情况。
  • 这两种数据结构各有优缺点,选择哪种取决于你的具体需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晨枫阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值