容器型数据类型——集合

容器型数据类型——集合

集合的定义

通常我们对集合的定义是“把一定范围的、确定的、可以区别的事物当作一个整体来看待”,集合中的各个事物通常称为集合的元素。

​ 集合底层使用的是哈希存储,通过计算元素的哈希码来决定元素存储的位置,这是一种高效率的。
​ 可变容器(列表、集合、字典)都无法计算哈希码。因此都不能放到集合里,作为集合的元素集合不能放集合。

集合的三大特性

  1. 无序性:一个集合中,每个元素的地位都是相同的,元素之间是无序的。
  2. 互异性:一个集合中,任何两个元素都认为是不相同的,即每个元素只能出现一次。
  3. 确定性:给定一个集合,任给一个元素,该元素或者属于或者不属于该集合,二者必居其一,不允许有模棱两可的情况出现。

集合的创建

创建集合的字面量语法(重复元素不会出现在集合中)

set1 = {1, 2, 3, 3, 3, 2}
print(set1)         # {1, 2, 3}
print(len(set1))    # 3

创建集合的构造器语法(后面会讲到什么是构造器)

set01 = {} # 注意此方法创建的是空字典并不是空集合

set2 = set('hello')
print(set2)         # {'h', 'l', 'o', 'e'}

将列表转换成集合(可以去掉列表中的重复元素)

set3 = set([1, 2, 3, 3, 2, 1])
print(set3)         # {1, 2, 3}

创建集合的生成式语法(将列表生成式的[]换成{})

set4 = {num for num in range(1, 20) if num % 3 == 0 or num % 5 == 0}
print(set4)         # {3, 5, 6, 9, 10, 12, 15, 18}`

集合元素的循环遍历

for elem in set4:#遍历出来的不是重复的元素
    print(elem)

集合的运算

成员运算 返回的是布尔值

set1 = {1,3,5,7,9}
set2 = {2,4,5,6,7,8}
print(1 in set1)       #True
print(1 not in set1)   #False

交集

  • intersection()
set1 = {1,3,5,7,9}
set2 = {2,4,5,6,7,8}
print(set1 & set2)            #{5,7}
print(set1.intersection(set2))

并集

  • union()
set1 = {1,3,5,7,9}
set2 = {2,4,5,6,7,8}
print(set1 | set2)       #{1,2,3,4,5,6,7,8,9}
print(set1.union(set2))

差集(你有我没有的)

  • difference()
set1 = {1,3,5,7,9}
set2 = {2,4,5,6,7,8}
print(set1 - set2)               #{1,3,9}
print(set2 - set1)               #{8,2,6,4}
print(set1.difference(set2))
print(set2.difference(set1))

对称集

print(set1 ^ set2)               #{1,2,3,4,6,8,9}
print(set1.symmetric_difference(set2))

判断子集

set3 = {1,2,3,4,5,6,7,8,9}
#判断真子集
print(set1 < set3)
#判断子集
print(set1 <= set3)
#判断超集
print(set1 > set3)

在这里插入图片描述

集合的操作方法与函数

加元素

  • add()是随机加在某个位置上
set1 = {'apple','banana','pitaya','apple'}
#加元素
set1.add('grape')      
set1.add('durian')
print(set1)           # {'durian', 'apple', 'pitaya', 'banana', 'grape'}

删元素

  • pop() 随机删并返回值 与前面集合不同,列表是默认删除末尾元素
set1 = {'apple','banana','pitaya','apple'}
print(set1.pop())            #banana
  • discard() 指定删除元素但不会返回值
print(set1.discard('pitaya'))    #None

清空元素

set1 = {'apple','banana','pitaya','apple'}
print(set1.clear())        #None

集合列表元组相互转换

nums = [1,1,10,10,10,15,3,9,9]
set4 = set(nums)#列表转集合可以去重但位置会打乱
print(set4)
list1 = list(set4)#集合转列表
print(list1)
tuple1 = tuple(list1)#元组转列表
print(tuple1)

总结

Python中的集合底层使用了哈希存储的方式,对于这一点我们暂时不做介绍,在后面的课程有需要的时候再为大家讲解集合的底层原理,现阶段大家只需要知道集合是一种容器,元素必须是hashable类型,与列表不同的地方在于集合中的元素没有序不能用索引运算不能重复

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值