集合简介
集合也是Python提供的内置数据结构之一。
可以把集合看作是没有存储value的字典,基于此集合的特点如下:
1.集合不可以存储重复的数据
2.集合的数据是无序的
3.集合的数据必须是不可变类型
4.集合可以动态伸缩
5.集合会浪费较大内存
创建
创建集合的方式有两种:
1.花括号{}
注意:{ }代表空字典,不代表空集合
2.调用内置函数set
>>>s={8,7,9,1,4,5}
>>>print(s)
>>>print({8,7,8,9,1,4,5,4})#自动去除重复元素
{1, 4, 5, 7, 8, 9}
{1, 4, 5, 7, 8, 9}
#以下三种方式等价
>>>print(set([8,7,9,1,4,5]))
>>>print(set((8,7,9,1,4,5)))
>>>print(set({8,7,9,1,4,5}))
{1, 4, 5, 7, 8, 9}
#空集合表示方式
print(set())
set()
注意如果将集合的元素中嵌入可变类型则会报错。
>>>print(set([[8,7],9,1,4,5]))
TypeError: unhashable type: 'list'
查找 增加 删除
用in 检查集合中是否存在指定元素
s={1,3,5,7,9}
print(1 in s)
print(2 in s)
True
False
增加的方法有两种
1.调用方法add一次添加一个元素
2.调用方法update一次添加多个元素
s.add(8)
print(s)
{1, 3, 5, 7, 8, 9}
s={1,3,5,7,9}
s.update((2,4))
print(s)
{1, 2, 3, 4, 5, 7, 9}
删除的方法有四种
1.调用方法remove一次删除一个元素
如果元素不存在则抛出KeyError
2.调用方法discard一次删除一个元素
如果元素不存在不抛出KeyError
3.调用方法pop一次删除一个任意元素
4.调用方法clear清空集合
>>>s={1,3,5,7,9}
>>>s.remove(5)
>>>print(s)
{1, 3, 7, 9}
>>>s.remove(8)
KeyError: 8
>>>s={1,3,5,7,9}
>>>s.discard(5)
>>>print(s)
>>>s.discard(8)
>>>print(s)
{1, 3, 7, 9}
{1, 3, 7, 9}
>>>s={1,3,5,7,9}
>>>print(s.pop())
>>>print(s)
1
{3, 5, 7, 9}
>>>s={1,3,5,7,9}
>>>s.clear()
>>>print(s)
set()
集合关系
1.集合相等
用运算符==可以判断集合是否相等。
2.子集
用方法issubset可以判断一个集合是否是另一个集合的子集。
3.超集
用方法issuperset可以判断一个集合是否是另一个集合的子集。
4.无交集
用方法isdisjoint可以判断两个集合是否没有交集。
>>>s1={1,3,5,7,9}
>>>s2={9,7,5,3,1}
>>>print(s1==s2)
True
>>>s1={1,3,5,7,9}
>>>s2={1,3,5,6,7,9}
>>>print(s1.issubset(s2))
>>>print(s2.issuperset(s1))
True
True
>>>s1={1,3,5,7,9}
>>>s2={2,4,6,8,10}
>>>print(s1.isdisjoint(s2))
True
数学运算
同数学上集合的运算一样,集合也能进行交集并集等运算。其中,数学运算符都存在等价的方法。
1.交集 & intersection
2.并集 | union
3.差集 - difference
4.对称差集 ^ symmetric_difference
>>>s1={1,3,5,7,9}
>>>s2={2,3,6,7,10}
>>>print(s1&s2)
>>>print(s1.intersection(s2))
{3, 7}
{3, 7}
print(s1|s2)
print(s1.union(s2))
{1, 2, 3, 5, 6, 7, 9, 10}
{1, 2, 3, 5, 6, 7, 9, 10}
print(s1-s2)
print(s1.difference(s2))
{1, 5, 9}
{1, 5, 9}
print(s1^s2)
print(s.symmetric_difference(s2))
{1, 2, 5, 6, 9, 10}
{1, 2, 5, 6, 9, 10}
不可变集合
frozenset至于set就好比tuple之于list
可以调用内置函数frozenset创建frozenset对象
>>>s=frozenset([1,3,5,7,9])
>>>print(s)
frozenset({1, 3, 5, 7, 9})