Python Set

Set

集合(Set)由序列(或其他可迭代对象)构建的,元素不能重复,无序。

>>> {3, 5, 1, 1}  # 元素不能重复,无序
{1, 3, 5}

创建集合

# Python 2.7
>>> set(range(10))
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
# Python 3.5
>>> set(range(10))
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

集合间的运算

>>> a = {1, 2, 3}
>>> b = {2, 3, 4}
>>> a.union(b)  # 并集
{1, 2, 3, 4}
>>> a | b  # 并集
{1, 2, 3, 4}
>>> a & b  # 交集
{2, 3}
>>> a.intersection(b)  # 交集
{2, 3}
>>> a.isdisjoint(b)  # 如果 a b 两集合不相交,则返回True。
False
>>> c = a & b
>>> c.issubset(a)  # c 是否属于 a 的一部分
True
>>> c <= a
True
>>> c.issuperset(a)  # a 是否属于 c 的一部分
False
>>> c >= a
False
>>> a.difference(b)  # a 存在,b 不存在的元素
{1}
>>> a - b
{1}
>>> a.symmetric_difference(b)  # a, b 不同的部分
{1, 4}
>>> a ^ b
{1, 4}
>>>

集合的基本操作

添加,add

>>> a.add(5)  # 添加
>>> a
{1, 2, 3, 5}

update

这里的操作同集合间的运算,将运算结果赋值给原 Set。

>>> a.update([5, 4], {"6": "7"})  # 也可以添加元素,且参数可以是列表,元组,字典等
>>> a
{1, 2, 3, 4, 5, '6'}

>>> a = {1, 2, 3}
>>> a |= {5, 4}  # |= 操作需要是 Set 类型
>>> a
{1, 2, 3, 4, 5}
>>> a.intersection_update([1, 2, 3, 8])  # 更新集合,只保留交集。
>>> a
{1, 2, 3}
>>> a &= {1, 3, 4}
>>> a
{1, 3}
>>> a = {1, 2, 3}
>>> a.difference_update([1, 4])  # 更新集合,删除参数中存在的元素
>>> a
{2, 3}
>>> a -= {3, 5}
>>> a
{2}
>>> a = {1, 2, 3}
>>> a.symmetric_difference_update([1, 4])  # 更新集合,只保留不同时存在于两者中的元素。
>>> a
{2, 3, 4}
>>> a ^= {3, 5}
>>> a
{2, 4, 5}

删除,remove,discard,pop

>>> a.remove(5)  # 删除
>>> a
{1, 2, 3, 4, '6'}
>>> a.remove(5)  # 如果元素不存在,则会发生错误
Traceback (most recent call last):
  File "<pyshell#79>", line 1, in <module>
    a.remove(5)
KeyError: 5
# 还有一个方法也是移除集合中的元素,且如果元素不存在,不会发生错误。
>>> a.discard(4)
>>> a.discard(4)
>>> a
{1, 2, 3, '6'}
# 随机删除集合中的一个元素(在交互模式,pop 是删除集合的第一个元素)
>>> a.pop()
1
>>> a
{2, 3, '6'}

计算集合元素个数

>>> len(a)
3

清空集合

>>> a.clear()
>>> a
set()

判断元素是否在集合中存在

>>> a = {1, 2, 3}
>>> 2 in a
True

浅拷贝,copy()

>>> a.copy()
{1, 2, 3}
>>> a.copy() is a
False
>>> a.copy() == a
True

frozenset

集合是可变的,所以不能用作字典的键。集合中只能包含不可变值,也就是不能包含集合。

使用frozenset类型,用于代表不可变的集合,这样也就可以用于字典的键。

>>> a = {1, 2, 3}
>>> b = {2, 3, 4}
>>> a.add(b)
Traceback (most recent call last):
  File "<pyshell#48>", line 1, in <module>
    a.add(b)
TypeError: unhashable type: 'set'
>>> a.add(frozenset(b))
>>> a
{1, 2, 3, frozenset({2, 3, 4})}

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 bin07280@qq.com

文章标题:Python Set

文章字数:955

本文作者:Bin

发布时间:2019-01-25, 15:38:06

最后更新:2019-08-06, 00:07:35

原始链接:http://coolview.github.io/2019/01/25/Python/Python%20Set/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录