【Python基础】set(集合)

发布时间 2024-01-10 12:06:11作者: 小C学安全

简介

集合跟我们学的列表有点像,也是可以存放一堆数据,不过集合有几个独特的特点,令其在整个Python语言中占有一席之地。
相当于只有键没有值的字典(键则是集合的数据)。

基本操作

特点

* 里面的元素不可变,代表不能存储一个list、dict、在集合中,字符串、数字、元组等不可变类型可以存。
* 天生自带去重,在集合中没有办法存储重复的元素。
* 无序、不像列表一样通过索引来标记在列表中的位置,元素是无序的,集合的元素无先后之分,如集合{2,3,4}和{3,2,4}算作相同集合。

作用

我们用集合主要做两件事: 去重和关系运算

基本语法

创建集合

注意也是{ },但不是dict,不是k-v结构
集合名 = {key,....}
集合名 = set()
集合名 = set(可迭代对象)
由于集合是天生去重,重复的值你根本存不进去

msg ={"小C学安全","Python","Java"}
msg1 = set("小C学安全")
msg2 = set(["小C学安全","Python","Java"])
print(msg,msg1,msg2)

msg ={"小C学安全","Python","Java","Python"}
print(msg)

{'Python', '小C学安全', 'Java'}

列表去重

a = [1,2,3,2,1,"Python","小C学安全","Python"]
print(a)
print(set(a))
print(list(set(a)))

增删改查

增:
集合名.add(元素)

msg={1, 2, '小C学安全', 3, 'Python'}
msg.add("哈哈哈哈")
print(msg)

删除:

  集合.pop() # 随机删除一个值,并返回该值
  集合.remove(3) # 删除3这个元素,若3不存在,报错
  集合.discard(3) # 删除指定的值,若该值不存在,不报错 None
  集合.clear() # 清空
msg={1, 2, '小C学安全', 3, 'Python'}
msg.pop()
print(msg)
#{2, 3, 'Python', '小C学安全'}
msg.remove(2)
print(msg)
#{1, 3, '小C学安全', 'Python'}
msg.discard(2)
print(msg)
#{1, 3, '小C学安全', 'Python'}
msg.clear()
print(msg)
#{}

查:

msg={1, 2, '小C学安全', 3, 'Python'}
print("小C学安全" in msg)
#结果为True

关系语法

交集 :( &;intersection) 返回共同元素

1 s1 = {1, 2, 3}
2 s2 = {2, 3, 4}
3 s3 = s1 & s2 # {2, 3}

并集: ( |;union ) 返回不重复元素

1 s1 = {1, 2, 3}
2 s2 = {2, 3, 4}
3 s3 = s1 | s2 # {1, 2, 3, 4

差集(补集):(-;difference)返回只属于其中之一的元素

1 s1 = {1, 2, 3}
2 s2 = {2, 3, 4}
3 s1 - s2 # {1} 属于s1但不属于s2

对称差集:(^ ;symmetric_difference )返回不相同的的元素

1 s1 = {1, 2, 3}
2 s2 = {2, 3, 4}
3 s3 = s1 ^ s2 # {1, 4} 等同于(s1-s2 | s2-s1)

子集<:判断一个集合的所有元素是否完全在另一个集合中 # issubset

超集>:判断一个集合是否具有另一个集合的所有元素 # issuperset

集合推导式

msg={1, 2, 66, 3, 88}
print({i+1 for i in msg})
print({i+1 for i in msg if i==66})

{2, 67, 3, 4, 89}
{67}