Python核心数据类型之集合类型及其运算
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)
-—-> 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)
-—-> 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
还没有评论,来说两句吧...