python--基础数据类型 set集合
Posted DESOLATE.X
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python--基础数据类型 set集合相关的知识,希望对你有一定的参考价值。
一.set集合
set集合是python的一个基本数据类型,一般不是很常用.set中的元素是不重复的.无序的.里面的元素必须是可hash的(int, str, tuple, bool)
注意:
set集合中的元素必须是可hash的,但是set本身是不可hash的.set是可变的
set中的元素是不重复的且无序的
使用上面的特性,我们可以用set来去重复
给list去重复 lst = [1,1,2,3,4,5,2,3,4] print(list(set(lst))) # 把list转换成set 再转换回list # [1, 2, 3, 4, 5]
二.集合的增删改查
1.增加 .add() . update()
s = {"刘嘉玲", ‘关之琳‘, "王祖贤"} s.add("郑裕玲") print(s) s.add("郑裕玲") # 重复的内容不会被添加到set集合中 print(s) s = {"刘嘉玲", ‘关之琳‘, "王祖贤"} s.update("麻花藤") # 迭代更新 print(s) s.update(["张曼玉", "李若彤","李若彤"]) print(s)
2.删除 .pop() .remove() .clear()
s = {"刘嘉玲", ‘关之琳‘, "王祖贤","张曼玉", "李若彤"} item = s.pop() # 随机弹出一个. print(s) print(item)
s.remove("关之琳") # 直接删除元素
print(s)
s.clear() # 清空set集合.需要注意的是set集合如果是空的. 打印出来是set() 因为要和 dict区分的. print(s) # set() # s.remove("马虎疼") # 不存在这个元素. 删除会报错
3.修改
# set集合中的数据没有索引. 也没有办法去定位一个元素. 所以没有办法进行直接修改. # 我们可以采用先删除后添加的方式来完成修改操作 s = {"刘嘉玲", ‘关之琳‘, "王祖贤","张曼?", "李若彤"} # 把刘嘉玲改成赵本山 s.remove("刘嘉玲") s.add("赵本?") print(s)
4.查询
# set是一个可迭代对象. 所以可以进行for循环 for el in s: print(el)
三.其他的常用操作
set集合本身是可以发生改变的. 是不可hash的. 我们可以使用frozenset来保存数据. frozenset是不可变的. 也就是一个可哈希的数据类型
frozenset
是不可变的, 也就是一个可哈希的数据类型
s = frozenset(["a", "b", "c", "d"]) dic = {s:‘123‘} # 可以正常使用了 print(dic) #{frozenset({‘c‘, ‘d‘, ‘b‘, ‘a‘}): ‘123‘}
集合中的操作
s1 = {"a", "b", "c"} s2 = {"d", "e", "a"}
1.交集 两个集合中共有的元素
print(s1&s2) # {‘a‘} print(s1.intersection(s2)) # {‘a‘}
2.并集
print(s1|s2) # {‘a‘, ‘c‘, ‘b‘, ‘d‘, ‘e‘} print(s1.union(s2)) # {‘a‘, ‘c‘, ‘b‘, ‘d‘, ‘e‘}
3.差集 得到第一个中单独存在的
print(s1 - s2) # {‘c‘, ‘b‘} print(s1.difference(s2)) # {‘c‘, ‘b‘}
4.反交集 两个集合中单独存在的数据
print(s1 ^ s2) #{‘c‘, ‘d‘, ‘b‘, ‘e‘} print(s1.symmetric_difference(s2)) # {‘c‘, ‘d‘, ‘b‘, ‘e‘}
5.子集
print(s1 < s2) # False 判断set1是否为set2的子集 print(s1.issubset(s2)) #False
6.超集
print(s1 > s2) # False 判断set1是否为set2的超集 print(s1.issuperset(s2)) # False
以上是关于python--基础数据类型 set集合的主要内容,如果未能解决你的问题,请参考以下文章
python基础--基本数据类型( Sets(集合)--不可变数据)