前面主要了解了 Python 的语言基础,现在我们来了解 Python 给我们提供了哪些数据类型,以及如何使用这些数据类型。
上一篇文章我们介绍了序列数据类型(str、tuple、list、bytes和bytearray),这篇我们介绍集合数据类型(set、frozenset)。
集合可以通过 set()
或者 {}
方法创建!
>>> s1 = set('hello') # set()方法
>>> s1
{'e', 'o', 'l', 'h'}
>>> type(s1)
<class 'set'>
>>> s2 = {'h', 'e', 'l', 'l', 'o'} # {}方法
>>> s2
{'e', 'o', 'l', 'h'}
>>> type(s2)
<class 'set'>
>>> s3 = set(['h', 'e', 'l', 'l', 'o']) # set()方法【如果要创建多个元素时用列表(list)括起来】
>>> s3
{'e', 'o', 'l', 'h'}
>>> type(s3)
<class 'set'>
>>> s4 = {} # 虽然{}可以创建集合,但是空的{}不代表集合,而是之后会介绍的字典(dict)!!!
>>> s4
{}
>>> type(s4) # 类型是字典,不是集合
<class 'dict'>
>>> s5 = set() # 空集合
>>> s5
set()
>>> type(s5)
<class 'set'>
>>> s6 = set('h', 'e', 'l', 'l', 'o') # 【易错点】创建多元素集合时要用列表括起来,即:set(['h', 'e', 'l', 'l', 'o'])
Traceback (most recent call last):
File "" , line 1, in <module>
TypeError: set expected at most 1 argument, got 5
通过类型构造器:frozenset()
创建集合。
例如,创建一个星期的英文缩写的不可变集合:
>>> s7 = frozenset(('MON','TUE','WED','THU','FRI','SAT','SUN'))
>>> s7
frozenset({'SAT', 'FRI', 'TUE', 'SUN', 'WED', 'MON', 'THU'})
>>> type(s7)
<class 'frozenset'>
由于集合本身是无序的,所以不能为集合创建索引或切片操作,只能循环遍历或使用 in、not in
来访问或判断集合元素。
>>> 'WED' in s7
True
>>> 'WWW' in s7
False
>>> for day in s7:
... print(day, end=" ")
...
SAT FRI TUE SUN WED MON THU
通过内置函数 len()
、max()
、min()
、sum()
,可以获取集合的长度、元素最大值、元素最小值、元素之和。
>>> s8 = {1,2,3,4,5,6,7,8,9}
>>> len(s8)
9
>>> max(s8)
9
>>> min(s8)
1
>>> sum(s8)
45
运算 | 含意 |
---|---|
x in <集合> | 检测x是否在集合中 |
s1|s2 | 并集 |
s1&s2 | 交集 |
s1-s2 | 差集 |
s1^s2 | 异或集,求s1与s2中相异元素 |
s1|=s2 | 将s2的元素并入s1 |
s1==s2 | 判断集合是否相等 |
s1<=s2 | 判断s1是否是s2的子集 |
s1判断s1是否是s2的真子集 |
|
s1>=s2 | 判断s1是否是s2的超集 |
s1>s2 | 判断s1是否是s2的真超集 |
>>> s1 = {1, 2, 3, 4}
>>> s1
{1, 2, 3, 4}
>>> s2 = {3, 5, 6}
>>> s2
{3, 5, 6}
>>> s3 = {2, 3}
>>> s3
{2, 3}
>>> 3 in s1 # 3在集合s1中
True
>>> 5 in s1 # 5不在集合s1中
False
>>> s1 | s2 # s1和s2的并集
{1, 2, 3, 4, 5, 6}
>>> s1 & s2 # s1和s2的交集
{3}
>>> s1 - s2 # s1和s2的差集
{1, 2, 4}
>>> s1 ^ s2 # s1和s2的异或集
{1, 2, 4, 5, 6}
>>> s1 # 上述集合运算不改变原集合
{1, 2, 3, 4}
>>> s1 |= s2 # 将s2并入到s1中
>>> s1 # 此并入操作会修改原集合
{1, 2, 3, 4, 5, 6}
>>> s1 == s2 # 判断两个集合是否相等
False
>>> s2 <= s1 # s2是s1的子集
True
>>> s2 < s1 # s2是s1的真子集
True
>>> s1 >= s2 # s1是s2的超集
True
>>> s1 > s2 # s1是s2的真超集
True
注:判断两个集合是否相等,只需判断其中包含的集合元素是否一致,与顺序无关。
方法 | 含意 |
---|---|
s1.union(s2 ) | s1|s2,返回一个新的集合对象 |
s1.difference(s2) | s1-s2,返回一个新的集合对象 |
s1.intersection(s2) | s1&s2,返回一个新的集合对象 |
s1.issubset(s2) | s1<=s2 |
s1.issuperset(s2) | s1>=s2 |
s1.update(s2) | 将s2的元素并入s1【*】 |
s1.add (x) | 增加元素x到s1【*】 |
s1.remove(x) | 从s1移除x,x不存在报错【*】 |
s1.clear () | 清空s1【*】 |
s1.copy() | 复制s1,返回一个新的集合对象 |
注:打星号*的方法是set集合独有的方法,不打星号的方法是两种集合都有的方法。
上一篇文章:【人生苦短,我学 Python】(4)Python 常用内置数据类型 II —— 序列数据类型(str、tuple、list、bytes和bytearray)
下一篇文章:【人生苦短,我学 Python】(6)字典数据类型(dict)