文章目录
1、集合(set)的定义
由不同元素组成的集合,集合中是一组无序排列的可hash值,可以作为字典的key
- 不同元素组成
- 无序
- 集合中元素必须是不可变 类型
- 集合本身是可变类型
#集合
s={1,2,3,4,5}
或者
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s=set("hello") #定义集合,l只保留一个
print(s)
输出:
{‘h’, ‘e’, ‘o’, ‘l’}
下面这段程序不符合set的定义,
s={[1,2],3,4,5} #[1,2]是不可hash的类型
print(s)
报错:TypeError: unhashable type: ‘list’
2、集合的方法
2.1、add
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s = {1, 2, 3}
s.add(4)
print(s)
输出:
{1, 2, 3, 4}
2.2、clear
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s = {1, 2, 3}
s.clear()
print(s)
输出:
set()
2.3、pop
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s = {"a",1, 2, 3}
v=s.pop() #集合是无序的,故随机删除一个元素,并返回删除的这个元素
print(v,s)
输出:
1
{2, 3, ‘a’}
2.4、remove
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s = {"a",1, 2, 3}
s.remove(3) #删除指定元素,若删除元素不存在会报错
print(s)
输出:
{1, 2, ‘a’}
2.5、discard
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s = {"a",1, 2, 3}
s.discard(3) #删除集合中存在的指定元素
print(s)
s.discard(1111) #删除集合中不存在的指定元素,不报错
print(s)
输出:
{1, 2, ‘a’}
{1, 2, ‘a’}
2.6、difference_update
2.7、issubset
2.8、update
更新多个值
将一个集合赋给另一个集合
例1:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
a=set(["a","b"])
b=set(["cd"])
a.update(b)
print(a)
{‘b’, ‘cd’, ‘a’}
例2:
a={"a","b"}
a.update("cd")
print(a)
输出:{‘a’, ‘d’, ‘c’, ‘b’}
2.9、in
s={1,"abc",4,5}
print("abc" in s) #在集合中返回True
输出:True
2.10、not in
s={1,"abc",4,5}
print("abc" not in s) #不在集合中返回True
输出:False
2.11、集合等价
集合等价返回True
s=set("abc")
s1=set("abcbbb")
print(s)
print(s1) #会去重
print(s==s1)
输出:
{‘a’, ‘b’, ‘c’}
{‘a’, ‘b’, ‘c’}
True
2.12、集合不等价
集合不等价返回True
s=set("abc")
s1=set("abcbbb")
print(s)
print(s1) #会去重
print(s!=s1)
输出:
{‘a’, ‘b’, ‘c’}
{‘a’, ‘b’, ‘c’}
False
3、集合的关系运算
3.1、交 集
#!/usr/bin/env python
# -*- coding:utf-8 -*-
a=set([1,2,3,4,5])
b=set([4,5,6])
v=a.intersection(b)
print("交集:",v)
输出:
交集: {4, 5}
3.2、差 集
#!/usr/bin/env python
# -*- coding:utf-8 -*-
a=set([1,2,3,4,5])
b=set([4,5,6])
v=a.difference(b)
print("差集:",v)
v=b.difference(a)
print("差集:",v)
输:
差集: {1, 2, 3}
差集: {6}
3.3、并 集
a=set([1,2,3,4,5])
b=set([4,5,6])
v=a.union(b)
print("并集:",v)
输出:
并集: {1, 2, 3, 4, 5, 6}
3.4、交差补集
交差补集=并集-交集
a=set([1,2,3,4,5])
b=set([4,5,6])
v=a.symmetric_difference(b)
print("交差补集:",v)
交差补集: {1, 2, 3, 6}
3.5、求完差集,并赋值回去
#!/usr/bin/env python
# -*- coding:utf-8 -*-
a=set([1,2,3,4,5])
b=set([4,5,6])
a.difference_update(b) #求完差集,并赋值
print("求完差集,并赋值:",a)
a=a-b
print("求完差集,并赋值:",a)
输:
求完差集,并赋值: {1, 2, 3}
求完差集,并赋值: {1, 2, 3}
3.6、判断是否有交集
#!/usr/bin/env python
# -*- coding:utf-8 -*-
a=set([1,2,3,4,5])
b=set([4,5,6])
c={7,8}
v=a.isdisjoint(b) #有交集返False
print(v)
v=a.isdisjoint(c) #无交集返True
print(v)
输出:
False
True
3.7、判断是否是子集
#!/usr/bin/env python
# -*- coding:utf-8 -*-
a=set([1,2,3,4,5])
b=set([4,5,6])
c={1,2,3,4,5,6}
v=a.issubset(b) #前者不是后者的子集,返False
print(v)
v=a.issubset(c) #前者是后者的子集,返True
print(v)
输出:
False
True
3.8、判断是否是父集
a=set([1,2,3])
b={1,2,3,4,5,6}
v=a.issuperset(b) #前者不是后者的父集,返False
print(v)
v=b.issuperset(a) #前者是后者的父集,返True
print(v)
输出:
False
True
3.9、集合的关系统运算符
a=set([1,2,3,4,5])
b=set([4,5,6,7])
c={1,2,3}
print(a | b) #并集
print(a & b) #交集
print(a - b) #差集
print(b - a) #差集
print(a ^ b) #对称差集,相当于并集-交集
print(a > c) #a是c的父集
print(c < a) #c是a的子集
输出:
{1, 2, 3, 4, 5, 6, 7}
{4, 5}
{1, 2, 3}
{6, 7}
{1, 2, 3, 6, 7}
True
True
4、不可变类型的集合
frozenset是冻结的集合,它是不可变的,存在哈希值,好处是它可以作为字典的key,也可以作为其它集合的元素。缺点是一旦创建便不能更改,没有add,remove方法。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
a={1,2,3}
b=frozenset(a)
print(b)
输出:
frozenset({1, 2, 3})
5、用集合去重
用这种方法去重会打乱原来的排列顺序
#!/usr/bin/env python
# -*- coding:utf-8 -*-
s = ["Jim", "Tom", "Jim","LeiLi"]
s = list(set(s))
print(s)
输出:
[‘LeiLi’, ‘Jim’, ‘Tom’]
5、集合的两大用途
- 去重
- 关系运算
本文详细介绍了集合(set)的定义、方法、关系运算及其在去重和判断中的应用。

1226

被折叠的 条评论
为什么被折叠?



