目录
1 概述
1 概述
在前面,我们已经对Python学习做了系统的知识梳理( Python思维导图)。
这一节我们分享集合。在高中时候,我们就接触了集合,我们今天要用到集合中一个很重要的性质:集合内部元素互异。
集合( set )和字典( dict )类似,它是一组 key 的集合,但不存储 value 。集合的特性就是: key 不能重复 。
2 集合基本操作
2.1 创建集合
set 的创建可以使用 {} 也可以使用 set 函数:
1. >>> s1 = { 'a' , 'b' , 'c' , 'a' , 'd' , 'b' } # 使用 {}
2. >>> {'a', 'c', 'd', 'b'}
3. set ([ 'a' , 'c' , 'b' , 'd' ])
4. >>>
5. >>> s2 = set ( 'helloworld' ) # 使用 set() ,接收一个字符串
6. >>>{'a', 'c', 'd', 'b'}
7. set ([ 'e' , 'd' , 'h' , 'l' , 'o' , 'r' , 'w' ])
8. >>>
9.
>>> s3 = set ([ '.mp3' , '.mp4' , '.rmvb' , '.mkv' , '.mp3' ]) # 使用 set() ,接收一个列表
10. >>> {'.mkv', '.mp3', '.mp4', '.rmvb'}
11. set ([ '.mp3' , '.mkv' , '.rmvb' , '.mp4' ])
2.2 遍历集合
1. >>> s = { 'a' , 'b' , 'c' , 'a' , 'd' , 'b' }
2. >>> for e in s :
3. ... print e
4. ...
5. a
6. c
7. b
8. d
2.3 添加元素
add() 方法可以将元素添加到 set 中,可以重复添加,但没有效果。
1. >>> s = { 'a' , 'b' , 'c' , 'a' , 'd' , 'b' }
2. >>> s
3. set ([ 'a' , 'c' , 'b' , 'd' ])
4. >>> s . add ( 'e' )
5. >>> s
6. set ([ 'a' , 'c' , 'b' , 'e' , 'd' ])
7. >>> s . add ( 'a' )
8. >>> s
9. set ([ 'a' , 'c' , 'b' , 'e' , 'd' ])
10. >>> s . add ( 4 )
11. >>> s
12. set ([ 'a' , 'c' , 'b' , 4 , 'd' , 'e' ])
2.4 删除元素
remove() 方法可以删除集合中的元素 , 但是删除不存在的元素,会抛出 KeyError ,可改用
discard() 。
1. >>> s = { 'a' , 'b' , 'c' , 'a' , 'd' , 'b' }
2. >>> s
3. set ([ 'a' , 'c' , 'b' , 'd' ])
4. >>> s . remove ( 'a' ) # 删除元素 'a'
5. >>> s
6. set ([ 'c' , 'b' , 'd' ])
7. >>> s . remove ( 'e' ) # 删除不存在的元素,会抛出 KeyError
8. Traceback ( most recent call last ):
9. File "<stdin>" , line 1 , in < module >
10. KeyError : 'e'
11. >>> s . discard ( 'e' ) # 删除不存在的元素 , 不会抛出 KeyError
2.5 交集/并集/差集
Python 中的集合也可以看成是 数学意义上的无序和无重复元素的集合 ,因此,我们可以对两个集合作交集、并集等。
1. >>> s1 = { 1 , 2 , 3 , 4 , 5 , 6 }
2. >>> s2 = { 3 , 6 , 9 , 10 , 12 }
3. >>> s3 = { 2 , 3 , 4 }
4. >>> s1 & s2 # 交集
5. set ([ 3 , 6 ])
6. >>> s1 | s2 # 并集
7. set ([ 1 , 2 , 3 , 4 , 5 , 6 , 9 , 10 , 12 ])
8. >>> s1 - s2 # 差集
9. set ([ 1 , 2 , 4 , 5 ])
10. >>> s3 . issubset ( s1 ) # s3 是否是 s1 的子集
11. True
12. >>> s3 . issubset ( s2 ) # s3 是否是 s2 的子集
13. False
14. >>> s1 . issuperset ( s3 ) # s1 是否是 s3 的超集
15. True
16. >>> s1 . issuperset ( s2 ) # s1 是否是 s2 的超集
17. False