set集合

. set集合:  无序的. 不重复的. 内容必须是可哈希的数据类型.
  set集合python的⼀个本数据类型. ⼀般不是很常⽤. set中的元素是不重复.序的.
  ⾯元素必须是可hash(int, str, tuple,bool), 我们可以这样来记. set就是dict类型的数据但
  是不保存value, 只保存key. set也⽤{}表⽰

  注意: set集合中的元素必须是可hash, 但是set是不可hash. set是可变的

set1 = {'1','alex',2,True,[1,2,3]} # 报错
set2 = {'1','alex',2,True,{1:2}} # 报错
set3 = {'1','alex',2,True,(1,2,[2,3,4])} # 报错

  set中的元素是不重复, 且⽆序的

s = {"周杰伦", "周杰伦", "周星星"}
print(s)
结果:
{'周星星', '周杰伦'}

  使⽤这个特.我们可以使⽤set来去掉重复

# 给list去重复
lst = [45, 5, "哈哈", 45, '哈哈', 50]
lst = list(set(lst)) # 把list转换成set, 然后再转换回list
print(lst)

  set集合增删改查

  1.增加: 

    add(): 添加元素

s = {"刘嘉玲", '关之琳', "王祖贤"}
s.add("郑裕玲")
print(s)
s.add("郑裕玲") # 重复的内容不会被添加到set集合中
print(s)

    update():迭代更新

s = {"刘嘉玲", '关之琳', "王祖贤"}
s.update("麻花藤") # 迭代更新
print(s)
s.update(["张曼⽟", "李若彤","李若彤"])
print(s)

  2. 删除

    pop():随机删除一个,返回删除的元素

1 s = {"刘嘉玲", '关之琳', "王祖贤","张曼⽟", "李若彤"}
2 item = s.pop() # 随机弹出⼀个.
3 print(s)
4 print(item)
View Code  

    remove():直接删除元素,不存在这个元素,删除会报错

s.remove("关之琳") # 直接删除元素
# s.remove("⻢⻁疼") # 不存在这个元素. 删除会报错
print(s)

  clear():清空set集合.需要注意的是set集合如果是空的. 打印出来是set() 因为要和
dict区分的.

s.clear() # 清空set集合.需要注意的是set集合如果是空的. 打印出来是set() 因为要和
dict区分的.
print(s) # set()

  3.修改  set集合中的数据没有索引. 也没有办法去定位⼀个元素. 所以没有办法进⾏直接修改.我们可以采⽤先删除后添加的⽅式来完成修改操作

s = {"刘嘉玲", '关之琳', "王祖贤","张曼⽟", "李若彤"}
# 把刘嘉玲改成赵本⼭
s.remove("刘嘉玲")
s.add("赵本⼭")
print(s)

  4. 查询

# set是⼀个可迭代对象. 所以可以进⾏for循环
for el in s:
print(el)

  5. 常见操作

  1.交集

    &    intersection() : 两个集合中的共有元素

s1 = {"刘能", "赵四", "⽪⻓⼭"}
s2 = {"刘科⻓", "冯乡⻓", "⽪⻓⼭"}
# 交集
# 两个集合中的共有元素
print(s1 & s2) # {'⽪⻓⼭'}
print(s1.intersection(s2)) # {'⽪⻓⼭'}

  2.幷集

    | union() :  把两个集合中合到一起,去除重叠的

print(s1 | s2) # {'刘科⻓', '冯乡⻓', '赵四', '⽪⻓⼭', '刘能'}
print(s1.union(s2)) # {'刘科⻓', '冯乡⻓', '赵四', '⽪⻓⼭', '刘能'}

  3.差集

    -  difference()

# 差集
print(s1 - s2) # {'赵四', '刘能'} 得到第⼀个中单独存在的
print(s1.difference(s2)) # {'赵四', '刘能'}

  4.反交集

# 反交集
print(s1 ^ s2) # 两个集合中单独存在的数据 {'冯乡⻓', '刘能', '刘科⻓', '赵四'}
print(s1.symmetric_difference(s2)) # {'冯乡⻓', '刘能', '刘科⻓', '赵四'}

  5.子集

1 = {"刘能", "赵四"}
s2 = {"刘能", "赵四", "⽪⻓⼭"}
# ⼦集
print(s1 < s2) # set1是set2的⼦集吗? True
print(s1.issubset(s2))

  6.超集

# 超集
print(s1 > s2) # set1是set2的超集吗? False
print(s1.issuperset(s2))

 frozenset()  : set集合是可以发⽣改变的. 是不可hash. 我们可以使⽤frozenset来保存数据
frozenset是不可变的. 也就是⼀个可哈希的数据类型

s = frozenset(["赵本⼭", "刘能", "⽪⻓⼭", "⻓跪"])
dic = {s:'123'} # 可以正常使⽤了
print(dic)

  

 

    

    

  

    

    

原文地址:https://www.cnblogs.com/liuye1990/p/9152399.html