集合: 集合是一个无序,不重复的数据序列
无序: 程序员无法控制其排不顺序, 程序员无法使用索引查找或修改数据
不重复:没有办法在字典中放入相同的值,会自动去重,类似于字典的键
无序:
set1 = {1, 2, 5, 6, 3, 4}
程序员无法利用其顺序,有顺序也无用
了解:在集合中会使用数据的值计算哈希值,根据哈希值顺序进行排序
print(set1) # {1, 2, 3, 4, 5, 6}
不重复
set2 = {1, 2, 3, 4, 5, 6, 7, 2, 3}
set会自动去重
print(set2) # {1, 2, 3, 4, 5, 6, 7}
定义空集合
set3 = set()
{} 是定义空字典的
print(set3)
集合中能够储存什么数据?
布尔值在进行计算时 True == 1 Fasle == 0
基础数据类型 int float bool 字符串 都可以用集合储存
set4 = {1, 12.3, True, 0, False, ''} print(set4)
TypeError: unhashable type: 'list'
列表数据无法用集合储存
set5 = {1, 12.3, True, 0, False, '', [1, 2]}
print(set5)
元组类型可以放入集合内储存
set6 = {1, 12.3, True, 0, False, '', (1, 2)} print(set6)
TypeError: unhashable type: 'dict'
字典类型无法用集合储存
set6 = {1, 12.3, True, 0, False, '', {1:2}}
TypeError: unhashable type: 'set'
集合类型同样不能使用集合嵌套
set6 = {1, 12.3, True, 0, False, '', {1,2}}
结论:列表 字典 集合,不能放入集合中,作为元素出现
拓展:不能作为集合元素的数据类型,同样不能作为字典的键出现
dict1 = {(1, 2): 3} print(dict1)
TypeError: unhashable type: 'list'
列表 字典 集合不能作为字典的键出现
dict2 = {[1, 2]: 3} print(dict2)
### 16、集合的相关操作
* 集合的增加
+ add:添加一个元素,如果值已存在,则去重
+ update: 更新元素(在括号中添加可迭代类型),如果值已存在则去重
add 增加
set1 = {1, 2, 3, 4}
set 在使用add命令后,不会产生新的数据,而是原集合中进行修改
set1.add(5) print(set1) # {1, 2, 3, 4, 5}
update 更新
TypeError: 'int' object is not iterable
update内部只能填写容器类型(数据序列)
set1.update(6)
set1.update([6, 7]) print(set1) # {1, 2, 3, 4, 5, 6, 7}
如果更新的数据已经存在,则去重
set1.update([1,2]) print(set1) # {1, 2, 3, 4, 5, 6, 7}
* 集合的删除
+ remove:根据元素值进行删除,如果元素不存在则报错
+ discard:根据元素值进行删除,如果元素值不存在则不报错
+ pop:删除任意元素,并返回被删除的值
remove
set1 = {1, 2, 3, 4}
使用remove可以删除指定值的元素
set1.remove(3)
print(set1) # {1, 2, 4}
pop 随机删除一个元素,并且将删除的元素返回
print(set1.pop())
print(set1)
discard
如果使用remove删除的元素不存在会怎样? 报错
set1.remove(13) # KeyError: 13
如果使用discard删除元素呢? 不会报错
set1.discard(3) print(set1) # {1, 2, 4} set1.discard(13) print(set1)
* 集合判断:
+ in
+ not in
数据是否在集合中
set1 = {1, 2, 3, 4}
in 判断元素是否在集合中出现
print(4 in set1) # True print(5 in set1) # Fasle
not in 判断元素是否不在集合中
print(4 not in set1) # False print(5 not in set1) # True
注意:格式 元素 in 集合
判断的数据必须要在集合中能够被储存
TypeError: unhashable type: 'list'
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!