作用:去重,关系运算,
#定义集合:
集合:可以包含多个元素,用逗号分割,
集合的元素遵循三个原则:
1:每个元素必须是不可变类型(可hash,可作为字典的key)
2: 没有重复的元素
3:无序
注意集合的目的是将不同的值存放到一起,不同的集合间用来做关系运算,无需纠结于集合中单个值
#1 集合定义
s={1,3.1,'aa',(1,23),} # s=set({1,3.1,'aa',(1,23),}) s=set() 空集合
# print(s,type(s))
>>> s={2,3,4}
>>> type(s)
>>> s
set([2, 3, 4])
>>> s={1,2,3,2,2,1}#自动去重(集合中的元素不重复)
>>> s
set([1, 2, 3])
>>> s={1,2,3}#可以通过这样的形式生成一个非空集合
>>> s
set([1, 2, 3])
#2如何生成一个空集合呢?>>> s={}#这样做生成的是空字典,并不是空集合>>> s{}>>> type(s)
可以这样生成空集合>>> s=set([])#将空列表转化成空集合>>> sset([])>>> s=set(())#也可以将空元组转化成空集合>>> sset([])
2》将列表或元组转换成集合>>> l=range(10)>>> l[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> s=set(l)#将列表转化成集合>>> sset([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])>>> l[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> l[0]#列表有序,通过下标访问元素0>>> s[0]#集合无序,不支持下标访问Traceback (most recent call last): File "", line 1, in s[0]TypeError: 'set' object does not support indexing>>> t=(1,2,3,4,3,2)>>> s=set(t)#将元组转换成集合(自动去重)set([1, 2, 3, 4])
#3 set类型对象的内置方法
add()增加一个元素
In [41]: s1 = set(range(10))
In [42]: s1
Out[42]: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
In [43]: s1.add(10)
In [44]: s1
Out[44]: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
remove()删除一个元素
指定删除set对象中的一个元素,如果集合中没有这个元素,则返回一个错误。
In [47]: s1
Out[47]: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
In [48]: s1.remove(0)
In [49]: s1
Out[49]: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
pop()随机删除并返回一个元素
随机删除并返回一个集合中的元素,若集合为空,则返回一个错误。
In [65]: s2 = set(['j','m','i','l','k'])
In [66]: s2.pop()
Out[66]: 'i'
In [67]: s2.pop()
Out[67]: 'k'
discard()删除一个元素
指定删除集合中的一个元素,若没有这个元素,则do nothing。
In [90]: s1
Out[90]: {1, 2, 3, 4, 5, 6, 7, 8, 9}
In [91]: s1.discard(1)
In [92]: s1
Out[92]: {2, 3, 4, 5, 6, 7, 8, 9}
In [93]: s1.discard('abc')
In [94]: s1
Out[94]: {2, 3, 4, 5, 6, 7, 8, 9}
clear()清空一个集合中的所有元素
In [94]: s1
Out[94]: {2, 3, 4, 5, 6, 7, 8, 9}
In [95]: s1.clear()
In [96]: s1
Out[96]: set()
update()更新并集:update()方法没有返回值。
In [111]: s1.update(s2,s3)
In [112]: s1
Out[112]: {1, 2, 3, 4, 5, 8, 9, 10, 'a', 'b', 'c', 'd', 'de', 'f'}
# 4 常用操作+内置的方法
pythons={'李二丫','张金蛋','李银弹','赵铜蛋','张锡蛋','alex','oldboy'}
linuxs={'lxx','egon','张金蛋','张锡蛋','alex','陈独秀'}
# 取及报名python课程又报名linux课程的学员:交集
# print(pythons & linuxs)
# print(pythons.intersection(linuxs))
# 取所有报名老男孩课程的学员:并集
# print(pythons | linuxs)
# print(pythons.union(linuxs))
# 取只报名python课程的学员: 差集
# print(pythons - linuxs)
# print(pythons.difference(linuxs))
# 取只报名linux课程的学员: 差集
# print(linuxs - pythons)
# print(linuxs.difference(pythons))
# 取没有同时报名两门课程的学员:对称差集
# print(pythons ^ linuxs)
# print(pythons.symmetric_difference(linuxs))
# 是否相等
# s1={1,2,3}
# s2={3,1,2}
# print(s1 == s2)
# 父集:一个集合是包含另外一个集合
# s1={1,2,3}
# s2={1,2}
# print(s1 >= s2)
# print(s1.issuperset(s2))
# s1={1,2,3}
# s2={1,2,4}
# print(s1 >= s2)
# 子集
# s1={1,2,3}
# s2={1,2}
# print(s2 <= s1)
# print(s2.issubset(s1))