容器型数据类型——集合
文章目录
集合的定义
通常我们对集合的定义是“把一定范围的、确定的、可以区别的事物当作一个整体来看待”,集合中的各个事物通常称为集合的元素。
集合底层使用的是哈希存储,通过计算元素的哈希码来决定元素存储的位置,这是一种高效率的。
可变容器(列表、集合、字典)都无法计算哈希码。因此都不能放到集合里,作为集合的元素集合不能放集合。
集合的三大特性
- 无序性:一个集合中,每个元素的地位都是相同的,元素之间是无序的。
- 互异性:一个集合中,任何两个元素都认为是不相同的,即每个元素只能出现一次。
- 确定性:给定一个集合,任给一个元素,该元素或者属于或者不属于该集合,二者必居其一,不允许有模棱两可的情况出现。
集合的创建
创建集合的字面量语法(重复元素不会出现在集合中)
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
类型,与列表不同的地方在于集合中的元素没有序、不能用索引运算、不能重复。