Python基础数据类型,关于“Set”集合及其常用用法
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理
本文章来自腾讯云 作者:Python进阶者
想要学习Python?有问题得不到第一时间解决?来看看这里“1039649593”满足你的需求,资料都已经上传至文件中,可以自行下载!还有海量最新2020python学习资料。
点击查看
set集合由{}(花括号,大括号)包裹,注意生成空的集合不能用空的{},空的{}生成的是个空字典,列表和元组可以用这种方式生成空列表或元组。
- 不同的元素组成(没有重复的元素)
- 无序
- 集合中的元素必须是不可变类型
# 定义一个集合 set1 = {1, 2, 3} print(set1, type(set1)) # 字符串转换为set集合 set2 = set('hello') print(set2) # set集合有不同的元素组成,天然去重复 set3 = {1, 2, 3, 1, 2, 3} print(set3) # set集合元素必须为不可变类型 # set4 = {1, 2, 3, [1, 2, 3]} # TypeError: unhashable type: 'list' # 注意生成的是一个空字典 temp1 = {} print(type(temp1)) # 正确的生成空集合的姿势 temp2 = set() print(type(temp2)) # 这两种方式都可以生成空列表或元组 t1 = () t2 = tuple() print(type(t1), type(t2))
set集合只能遍历取值,因为无序,所以无法索引取值
set1 = {1, 2, 3, 4, 5, 6} for i in set1: print(i)
添加
set1 = {1, 2, 3} set1.add(4) print(set1)
更新
# 和添加一样 set1 = {1, 2, 3, 4, 5, 6, 'aaa', 'sss'} # 添加一个值 set1.update('a') # 添加多个值 set1.update(['s','ss']) print(set1)
删除
set1 = {1, 2, 3, 4, 5, 6, 'aaa', 'sss'} temp = set1.pop() # 随机删除并返回删除的元素 print(set1, temp) set2 = {1, 2, 3, 4, 5, 6, 'aaa', 'sss'} # 指定删除,删除不存在的元素抛出异常 set2.remove('aaa') # set2.remove('a') # KeyError: 'a' set2.discard('sss') # 删除不存在的元素不抛出异常 set2.discard('s') print(set1) # 清空集合 set2.clear() print(set2)
定义一个不可变的集合
set1 = {1, 2, 3, 4, 5, 6, 'aaa', 'sss'} temp = set1.pop() # 随机删除并返回删除的元素 print(set1, temp) set2 = {1, 2, 3, 4, 5, 6, 'aaa', 'sss'} # 指定删除,删除不存在的元素抛出异常 set2.remove('aaa') # set2.remove('a') # KeyError: 'a' set2.discard('sss') # 删除不存在的元素不抛出异常 set2.discard('s') print(set1) # 清空集合 set2.clear() print(set2)
数学运算
set1 = {'aa', 'bb', 'cc', 'zz'} set2 = {'aa', 'bb', 'dd', 'ee'} # 交集,方法和符号两种一样 print(set1.intersection(set2)) print(set1 & set2) # 并集 print(set1.union(set2)) print(set1 | set2) # 差集 print(set1.difference(set2)) print(set1 - set2) # 交叉补集 print(set1.symmetric_difference(set2)) print(set1 ^ set2) # 是否有交集,如果没有返回 True,否则返回 False print(set1.isdisjoint(set2)) #某个集合是否是某个集合的子集,返回布尔值 print(set1.issubset(set2)) #某个集合是否是某个集合的父集,返回布尔值 print(set1.issuperset(set2))
总结
Python中set(集合),其实也是存储数据的一个容器,列表,元组,字典这三种数据类型也是存储数据的,其中列表和元组几乎一样,唯一区别就是元组无法更改(准确来说是元组的第一层索引无法更改),举个栗子:
tu = (1, 2, 3, 4, [1, 2, 3, 4]) # 想把整个列表换掉就会抛出异常 # tu[4] = 'a' #TypeError: 'tuple' object does not support item assignment # 改变元组内列表的值,整个元组的数据发生了一点点变化 # 其实原理很简单,就是整个列表的指针从没改变, tu[4][0] = 'a' print(tu)
嘻嘻,可能有人已经发现了,第一层的索引值无法改变,但是里面是一个可变的数据类型,就已经可以改变了。
元组适合存储数据不会发生变化的少量数据。
列表适合存储数据容易发生变化的少量数据。
为啥是少量数据呢?举个栗子,就好像我们要在字典中的所有字中找到某个字一样(假如没有根据拼音排序过的那种),那么我们一般就需要从第一个字开始寻找,一直到寻找到这个字。
相信大家都知道,上述的那种做法效率实在是太慢了,所以字典就加上了各种排序规则,查字典相信我们大家肯定都会。Python中的字典也是这样子的机制,存入的key按照某种规律已经排好序了,寻找键也是很快的,需要的时候直接通过键定位到相应的值,所以键只能是唯一的。
字典适合存存储大量的需要查询的数据。
集合适合存储值只能唯一的数据(去重)。