Python核心数据类型之集合类型及其运算

怼烎@ 2022-05-23 06:20 430阅读 0赞

Python核心数据类型之集合类型及其运算

集合:set、frozenset

无序排列、可哈希;支持集合关系测试,成员关系测试(in,not in)、支持迭代

集合支持操作:

s | t :并集

s & t :交集

s ^ t :对称差集

s - t :差集

len(s):长度

max(s):最大值

min(s):最小值

不支持操作:索引、元素获取、切片

集合的类型:可变集合set(), 不可变集合frozenset()

没有特定语法格式,只能通过工厂函数创建

可变集合内置函数:

s1.add(v):集合中加入元素v

s1.issubset(s2):s1是否是s2的子集

s1.clear():清除s1中对象

s1.issuperset():s1是否是s2的超集

s1.isdisjoint(s2):是否有相同项,没有则返回true

s1.copy():创建一个s1的副本

s1.pop():弹出一个s1对象

s1.difference(s2):求差集

s1.remove(x):移除集合中的x元素,如果x不是s1中值,则引发keyError异常

s1.difference_update(s2):求差集并将差集更新到s1

s1.symmetric_difference(s2):求对称差集,返回所有在s或t中,但又同时不在这两个集合中的项

s1.symmetric_difference_update(s2):求对称差集并将对称差集更新到s1

s1.intersection(s2):求交集

s1.union(s2):求并集

s1.intersection_update(s2):求交集并将交集更新到s1

s1.update(s2):将s2元素更新到s1中

不可变集合内置函数:

frozenset.copy frozenset.issuperset

frozenset.difference frozenset.mro

frozenset.intersection frozenset.symmetric_difference

frozenset.isdisjoint frozenset.union

frozenset.issubset

例1:创建集合及其常用方法

[root@test ~]# ipython

In [1]: s1 = set()

In [2]: type(s1)

Out[2]: set

In [3]: s1 = set([1,2,3,4])

In [4]: len(s1)

Out[4]: 4

In [5]: max(s1)

Out[5]: 4

In [6]: min(s1)

Out[6]: 1

In [7]: s1.

s1.add s1.issubset

s1.clear s1.issuperset

s1.copy s1.pop

s1.difference s1.remove

s1.difference_update s1.symmetric_difference

s1.discard s1.symmetric_difference_update

s1.intersection s1.union

s1.intersection_update s1.update

s1.isdisjoint

例2:集合支持的操作

In [7]: s2 = set([3,4,5,6])

In [8]: s1 & s2

Out[8]: {3, 4}

In [9]: s1.intersection(s2)

Out[9]: {3, 4}

In [10]: s1 | s2

Out[10]: {1, 2, 3, 4, 5, 6}

In [11]: s1.union(s2)

Out[11]: {1, 2, 3, 4, 5, 6}

In [12]: s1 ^ s2

Out[12]: {1, 2, 5, 6}

In [13]: s1.symmetric_difference(s2)

Out[13]: {1, 2, 5, 6}

In [14]: s1 - s2

Out[14]: {1, 2}

In [15]: s1.difference(s2)

Out[15]: {1, 2}

In [16]: s1.symmetric_difference_update(s2)

In [17]: print s1

set([1, 2, 5, 6])

In [18]: s1.difference(s2)

Out[18]: {1, 2}

In [19]: s1.difference_update(s2)

In [20]: print s1

set([1, 2])

例3:集合内置方法的使用

In [21]: s3 = set(‘xyz’)

In [22]: print s3

set([‘y’, ‘x’, ‘z’])

In [23]: s3.pop()

Out[23]: ‘y’

In [24]: s3.pop()

Out[24]: ‘x’

In [25]: s3.pop()

Out[25]: ‘z’

In [26]: s3.pop()

-—————————————————————————————————————

KeyError Traceback(most recent call last)

in()

-—-> 1 s3.pop()

KeyError: ‘pop from an empty set’

#使用pop()逐一弹出集合内元素,元素为空时会返回值错误

In [27]: id(s1)

Out[27]: 44439440

In [28]: s3 = set(‘xyx’)

In [29]: s1.update(s3)

In [30]: print s1

set([1, 2, ‘y’, ‘x’])

In [31]: id(s1)

Out[31]: 44439440

#可变集合改变元素,id不变

In [32]: s1.add(‘z’)

In [33]: print s1

set([1, 2, ‘y’, ‘x’, ‘z’])

In [34]: s1.add(‘KEY’)

In [35]: print s1

set([1, 2, ‘KEY’, ‘y’, ‘x’, ‘z’])

In [36]: s4=s1.copy()

In [37]: id(s4)

Out[37]: 45252920

In [38]: print s4

set([1, 2, ‘KEY’, ‘y’, ‘x’, ‘z’])

In [39]: s1.clear()

In [40]: print s1

set([])

In [41]: help(s1.remove)

In [42]: s4.remove(‘key’)

-—————————————————————————————————————

KeyError Traceback(most recent call last)

in()

-—-> 1 s4.remove(‘key’)

KeyError: ‘key’

# 集合使用remove()方法移除一个不存在元素时,会返回值错误

In [43]: s4.remove(‘KEY’)

In [44]: print s4

set([1, 2, ‘y’, ‘x’, ‘z’])

In [45]: s4.remove(‘y’)

In [46]: print s4

set([1, 2, ‘x’, ‘z’])

例4、不可变集合内置方法

In [47]: frozenset.

frozenset.copy frozenset.issuperset

frozenset.difference frozenset.mro

frozenset.intersection frozenset.symmetric_difference

frozenset.isdisjoint frozenset.union

frozenset.issubset

发表评论

表情:
评论列表 (有 0 条评论,430人围观)

还没有评论,来说两句吧...

相关阅读