set 属于不可哈希类型数,但是set 内只能放入可哈希数据,如int,str,tuple。bool也可放入,但是不会显示。
set的元素是唯一且无序的,所以可以用来去重,如list(set(list)),因为set 内容元素是可哈希的,所以对set内容只能增删,不能直接修改。
但因为setde 特性,set可以求差集、并集、反交集、子集和超集等
增
add 将一个元素加入set中,如已有则不做修改
>>> s.add(1)
>>> s = {1,2,3,4}
>>> s.add(1)
>>> s
{1, 2, 3, 4}
>>> s.add(7)
>>> s
{1, 2, 3, 4, 7}
update 以最小元素插入set,已有元素不做修改
>>> s = {1,2,3,4}
>>> s.update('qqqrft')
>>> s
{'t', 1, 2, 3, 4, 'f', 'r', 'q'}
>>> s.update((1,2,3,4))
>>> s
{'t', 1, 2, 3, 4, 'f', 'r', 'q'}
>>> s.update((8,9,6))
>>> s
{'t', 1, 2, 3, 4, 6, 'f', 8, 9, 'r', 'q'}
删
pop 随机删除元素,有返回值
>>> s = {'t', 1, 2, 3, 4, 6, 'f', 8, 9, 'o', 'r', 'q'}
>>> s
{'t', 1, 2, 3, 4, 6, 'f', 8, 9, 'o', 'r', 'q'}
>>> s.pop()
't'
>>> s
{1, 2, 3, 4, 6, 'f', 8, 9, 'o', 'r', 'q'}
>>> s.pop()
1
>>> s
{2, 3, 4, 6, 'f', 8, 9, 'o', 'r', 'q'}
remove 按元素删除,如无这个元素则会报错
>>> s = {'t', 1, 2, 3, 4, 6, 'f', 8, 9, 'r', 'q','o'}
>>> s.remove(1)
>>> s
{'t', 2, 3, 4, 6, 'f', 8, 9, 'o', 'r', 'q'}
>>> s.remove(1)
Traceback (most recent call last):
File "<pyshell#28>", line 1, in <module>
s.remove(1)
KeyError: 1
clear 清空set,返回空set;空set为set(), {}为空dict。
>>> s = {'t', 1, 2, 3, 4, 6, 'f', 8, 9, 'r', 'q','o'}
>>> s.clear()
>>> s
set()
del 删除set
>>> s = {'t', 1, 2, 3, 4, 6, 'f', 8, 9, 'r', 'q','o'}
>>> del s
>>> s
Traceback (most recent call last):
File "<pyshell#35>", line 1, in <module>
s
NameError: name 's' is not defined
discard 删除制定元素,如没有该元素则不做任何操作
>>> s = {'t', 1, 2, 3, 4, 6, 'f', 8, 9, 'r', 'q','o'}
>>> s.discard(2)
>>> s
{'t', 1, 3, 4, 6, 'f', 8, 9, 'o', 'r', 'q'}
>>> s.discard(2)
>>> s
{'t', 1, 3, 4, 6, 'f', 8, 9, 'o', 'r', 'q'}
查
for
>>> s = {'t', 1, 2, 3, 4, 6, 'f', 8, 9, 'r', 'q','o'}
>>> for i in s:
print(i)
t
1
2
3
4
6
f
8
9
o
r
q
交集
inintersection 返回s1 和s2相交的集合
>>> s1 = {'t', 1, 2, 3, 4, 6, 'f', 8, 9, 'r', 'q','o'}
>>> s2 = {1,2,3,4,5,6,7,8,9,0}
>>> s3 = s1.intersection(s2)
>>> s3
{1, 2, 3, 4, 6, 8, 9}
并集
| 将s1和s2合并为s3
>>> s1 = {'t', 1, 2, 3, 4, 6, 'f', 8, 9, 'r', 'q','o'}
>>> s2 = {1,2,3,4,5,6,7,8,9,0}
>>> s3 = s1 | s2
>>> s3
{'t', 1, 2, 3, 4, 0, 6, 5, 8, 9, 7, 'o', 'r', 'f', 'q'}
反交集
^ 和 symmetric_difference 将s1和s2共同的部分去掉,剩下的集合
>>> s1 = {'t', 1, 2, 3, 4, 6, 'f', 8, 9, 'r', 'q','o'}
>>> s2 = {1,2,3,4,5,6,7,8,9,0}
>>> s3 = s1 ^ s2
>>> s3
{0, 5, 7, 'f', 't', 'o', 'r', 'q'}
>>> s1 = {'t', 1, 2, 3, 4, 6, 'f', 8, 9, 'r', 'q','o'}
>>> s2 = {1,2,3,4,5,6,7,8,9,0}
>>> s3 = s1.symmetric_difference(s2)
>>> s3
{0, 5, 7, 'f', 't', 'o', 'r', 'q'}
差集
>>> s1 = {'t', 1, 2, 3, 4, 6, 'f', 8, 9, 'r', 'q','o'}
>>> s2 = {1,2,3,4,5,6,7,8,9,0}
>>> s3 = s1 - s2 #返回s1独有的
>>> s3
{'t', 'f', 'o', 'r', 'q'}
>>> s1 = {'t', 1, 2, 3, 4, 6, 'f', 8, 9, 'r', 'q','o'}
>>> s2 = {1,2,3,4,5,6,7,8,9,0}
>>> s3 = s1.difference(s2) #返回s1独有的
>>> s3
{'t', 'f', 'o', 'r', 'q'}
子集和超集
>>> s1 = {1,2,3}
>>> s2 = {1,2,3,4,5,6,7,8,9,0}
>>> s3 = s1 < s2 #s1是s2的子集
>>> s3
True
>>> s3 = s1.issubset(s2)
>>> s3 #s1是s2的子集
True
>>> s2 > s1
True #s2是s1的超集
>>> s2.issuperset(s1)
True #s2是s1的超集
other
symmetric_difference_update 将s1中s2的东西删除
>>> s1 = {'t', 1, 2, 3, 4, 6, 'f', 8, 9, 'r', 'q','o'}
>>> s2 = {1,2,3,4,5,6,7,8,9,0}
>>> s1.difference_update(s2)
>>> s1
{'t', 'f', 'o', 'r', 'q'}
>>> s2
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
symmetric_difference_update 删除s1和s2相同的并把s2独有的加入到s1中
>>> s1 = {'t', 1, 2, 3, 4, 6, 'f', 8, 9, 'r', 'q','o'}
>>> s2 = {1,2,3,4,5,6,7,8,9,0}
>>> s1.symmetric_difference_update(s2)
>>> s1
{'t', 0, 'f', 5, 7, 'o', 'r', 'q'}
>>> s2
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}