Python大牛的视角:深入剖析Python集合(Set)操作

  1. 目录

    1. 集合的定义

    1.1 什么是集合?

    1.2 集合与列表的区别

    1.3 集合的创建

    2. 集合的“键”与“值”的澄清

    3. 集合的常见操作

    3.1 添加元素

    3.2 删除元素

    3.3 求交集

    3.4 求并集

    3.4 求差集


1. 集合的定义

1.1 什么是集合?

集合是一个无序的、不包含重复元素的数据结构。在Python中,集合主要用于数学上的集合操作,如并集、交集、差集和对称差集等。集合使用大括号{}来定义,但需要注意的是,空集合不能使用{}(这会被Python解释器理解为空字典),而应该使用set()来创建。

1.2 集合与列表的区别

  • 有序性:列表是有序的,集合是无序的。这意味着集合中的元素没有固定的顺序,而列表中的元素按照插入顺序排列。
  • 唯一性:集合中的元素必须是唯一的,不能包含重复的元素;而列表则允许包含重复的元素。
  • 性能:由于集合内部实现通常基于哈希表,因此在执行查找、插入和删除操作时,集合通常比列表更快。

1.3 集合的创建

print("------------------------------集合定义--------------------------------------")
# 集合的定义方式
# 方式一:直接{1,2,3,4,5},但是不能定义空集合,否则就成字典了
d1 = {}
print(type(d1))  # <class 'dict'>

s1 = {1}
print(type(s1))  # <class 'set'>

# 方式二: set(iterable),可以定域空集合
s1 = set()
print(s1, type(s1))  # set() <class 'set'>

# 由于集合时无序的,所以打印的结果不会与创建时一致
s1 = set(range(10))
print(s1, type(s1))  # {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} <class 'set'>


2. 集合的“键”与“值”的澄清

在这里需要澄清一个常见的误解:集合不直接支持“键”与“值”的概念。这是字典(Dictionary)的特性,其中每个元素都是一个键值对(key-value pair)。集合只包含元素本身,没有与之关联的键或值。因此,在讨论集合时,我们通常只谈论集合中的“元素”。

然而,从某种抽象的角度来看,我们可以将集合中的每个元素视为一个“键”,但这个“键”并不直接关联任何“值”。在集合操作中,我们关心的是元素的存在性,而不是它们的值或与其他元素的关联。

print("------------------------------集合特性--------------------------------------")
# 集合的特性: 1.不重复,可以用于去重
#            2.无序,不可以利用索引遍历 每次运行随即存放,但是数字会按升序存放
s1 = {"a", 1, 2, 3, "b", ";"}  # {'a', 1, 2, 3, ';', 'b'}
print(s1)
for e in s1:
    print(e, end="  ")  # 1  2  3  a  ;  b
print()

s1 = {1, 2, 3, 4, 5}
s1.add(1)
s1.add(2)
s1.add(6)
print(s1)  # {1, 2, 3, 4, 5, 6}  重复的数据不会添加

3. 集合的常见操作

3.1 添加元素

  • add(element): 向集合中添加一个元素,如果该元素已存在,则操作无效,不会抛出
    print("------------------------------集合操作--------------------------------------")
    s1 = {1, 2, 3, 4, 5}
    # add添加
    s1 = {1, 2, 3, 4, 5}
    s1.add("a")
    s1.add(1)
    print(s1)  # {'a', 1, 2, 3, 4, 5}  重复的1不会添加


  • update(iterable): 使用另一个可迭代对象(如列表、元组或另一个集合)中的元素来更新集合,即添加那些不在集合中的元素。
# 合并 与列表的update相似  将另一个集合和并到本集合中
s1.update({4, 5, 6, 1, 2, 3})
print(s1)  # {1, 2, 3, 4, 5, 6}


3.2 删除元素

  • remove(element): 从集合中移除一个元素。如果该元素不存在,则抛出KeyError
# remove删除   与列表中的remove相似,当找不到想要删除数据时会报错
# 没有返回值
# s1.remove(6)
# print(s1)   # 报错  KeyError: 6
s1 = {1, 2, 3, 4, 5}
r = s1.remove("a")
print(r, s1)  # None {1, 2, 3, 4, 5}

  • discard(element): 从集合中移除一个元素。如果元素不存在,则什么也不做,也不会抛出错误。

	my_set = {1, 2, 3} 

	my_set.discard(2) 

	print(my_set) # 输出: {1, 3} 

	my_set.discard(4) # 4不在集合中,但操作不会引发错误

  • pop(): 移除并返回集合中的一个元素(任意元素)。如果集合为空,则抛出KeyError。不过,需要注意的是,在Python 3.7及更高版本中,pop()返回的元素通常是最后一个被添加的元素(尽管集合是无序)
        # pop随机删除 并且返回删除的数据
    
        r = s1.pop()
    
        print(r, s1)  # 1 {2, 3, 4, 5}


    3.3 求交集

  • 求交集 intersection()  返回交集    intersection_update()求交集,将交集赋予s1
     

        s1 = {1, 2, 3}
    
        s2 = {1, 4, 5}
    
        r = s1.intersection(s2)
    
        print(r)  # {1}
    
        s1.intersection_update(s2)
    
        print(s1)  # {1}
    

    3.4 求并集

  • 求并集 union()  返回并集
    
    
    s1 = {1, 2, 3}
    
    s2 = {1, 4, 5}
    
    r = s1.union(s2)
    
    print(r)  # {1, 2, 3, 4, 5}

    3.4 求差集

  • 求差集  s1.difference(s2) 返回差集(s1有s2没有)   s1.difference_update(s2)将s1与s2的差集赋予s1
    
    
    s1 = {1, 2, 3}
    
    s2 = {1, 4, 5}
    
    r = s1.difference(s2)
    
    print(r)  # {2, 3}
    
    s1.difference_update(s2)
    
    print(s1)  # {2, 3}

  • 13
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值