集合
可以把集合看做是没有存储vlaue
的字典,集合的特点和字典类似,如下:
- 集合中不能存在重复的数据
- 集合中的key是无序的
- 集合中的数据可以是任何不可变类型,并且多种类型的数据可以混合存贮在一个集合中
- 集合可以根据需要动态伸缩,在使用前无需事先声明集合的容量
- 集合会浪费大量的内存,用空间换时间
集合的创建
1、使用花括号{},集合会去除重复的元素,并无序排列
>>> s = {5, 1, 2, 6, 2, 1}
>>> s
{1, 2, 5, 6}
2、调用内置函数set()
传入迭代器对象
>>> s = set(range(6))
>>> s
{0, 1, 2, 3, 4, 5}
传入字典
>>> s = set([5, 1, 2, 6, 2, 1])
>>>
>>> s
{1, 2, 5, 6}
传入元组
>>> s = set((5, 1, 2, 6, 2, 1))
>>> s
{1, 2, 5, 6}
传入字符串
>>> s = set('1231231')
>>> s
{'1', '2', '3'}
创建空集合
>>> s = set()
>>> s
set()
集合间的关系
1、判断两个集合是否相等
>>> s1 = {1, 3, 5, 7, 9}
>>> s2 = {5, 3, 7, 9, 1}
>>> s1 == s2
True
2、判断集合是否是另一个集合的子集
>>> s1 = {1, 3, 5, 7, 9}
>>> s2 = {2, 3, 6, 7, 10}
>>> s3 = {1, 3, 5, 6, 7, 9}
>>>
>>> s1.issubset(s2)
False
>>>
>>> s1.issubset(s3)
True
3、判断集合是否是另一个集合的超集
>>> s1 = {1, 3, 5, 7, 9}
>>> s2 = {2, 3, 6, 7, 10}
>>> s3 = {1, 3, 5, 6, 7, 9}
>>> s2.issuperset(s1)
False
>>> s3.issuperset(s1)
True
4、判断两个集合是否没有交集
>>> s1 = {1, 3, 5, 7, 9}
>>> s2 = {2, 3, 6, 7, 10}
>>> s3 = {2, 4, 6, 8, 10}
>>>
>>> s1.isdisjoint(s2)
False
>>> s1.isdisjoint(s3)
True
集合的数学操作
1、使用intersection()
方法求交集,原集合不变,等价于使用&
符号
>>> s1 = {1, 3, 5, 7, 9}
>>> s2 = {2, 3, 6, 7, 10}
>>> s1.intersection(s2)
{3, 7}
>>> s1 & s2
{3, 7}
s1.intersection_update(s2)方法,用s1.intersection(s2)的返回值更新集合s1,s2不变,返回值为None
>>> s1 = {1, 3, 5, 7, 9}
>>> s2 = {2, 3, 6, 7, 10}
>>> s1.intersection_update(s2)
>>> s1
{3, 7}
>>> s2
{2, 3, 6, 7, 10}
2、并集
使用union()
求并集,原集合不变,不存在方法union_update()
,等价于使用|
符号
>>> s1 = {1, 3, 5, 7, 9}
>>> s2 = {2, 3, 6, 7, 10}
>>> s1.union(s2)
{1, 2, 3, 5, 6, 7, 9, 10}
>>> s1 | s2
{1, 2, 3, 5, 6, 7, 9, 10}
3、使用difference()方法求补集,原集合不变,等价于使用“-”符号
>>> s1 = {1, 3, 5, 7, 9}
>>> s2 = {2, 3, 6, 7, 10}
>>> s1.difference(s2)
{1, 5, 9}
>>> s2.difference(s1)
{2, 10, 6}
>>> s1 - s2
{1, 5, 9}
>>> s2 - s1
{2, 10, 6}
s1.difference_update(s2)
方法,用s1.difference(s2)
的返回值更新集合s1,s2不变,返回值为None
>>> s1 = {1, 3, 5, 7, 9}
>>> s2 = {2, 3, 6, 7, 10}
>>> s1.difference_update(s2)
>>> s1
{1, 5, 9}
>>> s2
{2, 3, 6, 7, 10}
4、使用symmetric()
方法求对称补集,原集合不变,等价于使用^
符号
>>> s1 = {1, 3, 5, 7, 9}
>>> s2 = {2, 3, 6, 7, 10}
>>> s1.symmetric_difference(s2)
{1, 2, 5, 6, 9, 10}
>>> s1 ^ s2
{1, 2, 5, 6, 9, 10}
s1.symmetric_update(s2)
方法,用s1.symmetric(s2)
的返回值更新集合s1,s2不变,返回值为None
>>> s1 = {1, 3, 5, 7, 9}
>>> s2 = {2, 3, 6, 7, 10}
>>> s1.symmetric_difference_update(s2)
>>> s1
{1, 2, 5, 6, 9, 10}
>>> s2
{2, 3, 6, 7, 10}
集合查操作
使用in
关键字判断
>>> s1
{1, 2, 5, 6, 9, 10}
>>>
>>>
>>> 1 in s1
True
>>>
>>> 3 in s1
False
集合的增操作
1、使用add()
方法,一次只添加一个元素
>>> s1
{1, 2, 5, 6, 9, 10}
>>>
>>> s1.add(8)
>>> s1
{1, 2, 5, 6, 8, 9, 10}
2、使用update()
方法,
>>> s1 = {1, 2, 3, 4, 5}
传入集合
>>> s1.update({6, 7})
>>> s1
{1, 2, 3, 4, 5, 6, 7}
>>>
传入列表
>>> s1.update([8, 9])
>>> s1
{1, 2, 3, 4, 5, 6, 7, 8, 9}
传入元组
>>> s1.update((10,))
>>> s1
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
集合的删操作
1、使用remove()
方法,一次只能删除一个元素
>>> s1
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
>>> s1.remove(5)
>>> s1
{1, 2, 3, 4, 6, 7, 8, 9, 10}
>>> s1.remove(11)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 11
2、使用discard()
方法,如果指定的元素在集合中不存在,不会抛出错误,一次只能删除一个元素
>>> s1
{1, 2, 3, 4, 6, 7, 8, 9, 10}
>>>
>>> s1.discard(6)
>>> s1
{1, 2, 3, 4, 7, 8, 9, 10}
>>>
>>> s1.discard(11)
>>> s1
{1, 2, 3, 4, 7, 8, 9, 10}
3、使用方法pop()
,不能传递参数,一次只删除一个元素,并返回被删除的元素
>>> s1
{1, 2, 3, 4, 7, 8, 9, 10}
>>> s1.pop()
1
>>> s1.pop()
2
>>> s1.pop()
3
>>> s1
{4, 7, 8, 9, 10}
4、使用clear()
方法,清空集合
>>> s1
{4, 7, 8, 9, 10}
>>> s1.clear()
>>> s1
set()
不可变集合,frozenset
frozenset
是不可变类型,因此存在hash
值,可以作为字典的key
,也可以作为set
中的元素
使用内置函数frozenset()
,创建frozenset
>>> frozenset()
frozenset()
>>> frozenset(range(1, 6))
frozenset({1, 2, 3, 4, 5})
>>> frozenset([1, 2, 3, 4, 5])
frozenset({1, 2, 3, 4, 5})
>>> frozenset((1, 2, 3, 4, 5))
frozenset({1, 2, 3, 4, 5})
>>> frozenset('12345')
frozenset({'1', '3', '2', '5', '4'})
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 289211569@qq.com