开篇寄语
此前,介绍了Python的基础知识以将来编写爬虫脚本,具体可以参看下方的前情提要。本篇文章则是要着重讲解一下Python中有关Set的用法,在结合实际案例中以讲解明白,为将来在使用爬虫过程中灵活运用,分享给大家。
内容详情
内容详情
在本教程中,您将了解有关 Python 集的所有内容;它们是如何创建的,从它们中添加或删除元素,以及在 Python 中对集合执行的所有操作。
特性如下:
集合是项目的无序集合。每个集合元素都是唯一的(没有重复)并且必须是不可变的(不能更改)。
但是,集合本身是可变的。我们可以在其中添加或删除项目。
集合还可用于执行数学集合运算,例如并集、交集、对称差等。
set是乱序的,即输出打印几乎每次结果不尽相同
创建Set
通过将所有项目(元素)放在大括号 {} 内,用逗号分隔,或使用内置的 set() 函数来创建集合。
它可以有任意数量的项目,它们可能是不同的类型(整数、浮点数、元组、字符串等)。但是集合不能将可变元素(如列表、集合或字典)作为其元素,示例如下:
# Different types of sets in Python # set of integers my_set = {1, 2, 3} print(my_set) # set of mixed datatypes my_set = {1.0, "Hello", (1, 2, 3)} print(my_set) ``` 输出结果为: {1, 2, 3} {1.0, (1, 2, 3), 'Hello'} ```
特别提醒,set中不能有可变项,比如:
my_set = {1, 2, [3, 4]}
如果运行就会提示错误了。
创建空集set
a = set()
修改set
# 设置一个集合 a = {1, 3} # 添加元素 my_set.add(2) #这样集合就多了一个2 # 添加更多的元素 my_set.update([2, 3, 4]) print(my_set) # 添加list和set my_set.update([4, 5], {1, 6, 8}) print(my_set)
移除元素
有两种方式,一种是discard(),另一种是remove()。
my_set = {1, 3, 4, 5, 6} my_set.discard(4) #输出结果为{1, 3, 5, 6} my_set.remove(5) #输出结果为{1, 3, 6}
都是同样能起到移除元素的作用,那么问题来了,它两个有什么区别呢?
大致上,如果用discard移除集合里面没有的元素,不会报错,但是remove确会。
当然,也可以使用pop来去掉元素,不过就是随机的了,因为set本身就是乱序的。
my_set.pop()
集合与集合运算
- 并集
- 即两个集合里的元素置于同一集合里
A = {1, 2, 3, 4, 5} B = {4, 5, 6, 7, 8} print(A | B) #也可以写成A.union(B)或者B.union(A) #输出结果为:{1, 2, 3, 4, 5, 6, 7, 8}
- 交集
- 即两个集合里面都共有的元素
A = {1, 2, 3, 4, 5} B = {4, 5, 6, 7, 8} print(A & B) #可以这样写A.intersection(B)或者B.intersection(A) #输出结果为{4,5}
- 差集
- 即A集合有B集合没有,或者说B集合有A集合没有
A = {1, 2, 3, 4, 5} B = {4, 5, 6, 7, 8} print(A - B) #也可以这样写A.difference(B) print(B - A) #也可以这样写B.difference(A) #输出结果为{1, 2, 3} #输出结果为{6, 7, 8}
- 反差集
- 即A集合和B集合都不同的放置于同一集合
A = {1, 2, 3, 4, 5} B = {4, 5, 6, 7, 8} print(A ^ B) #也可以这样写A.symmetric_difference(B)或者B.symmetric_difference(A) #输出结果为{1, 2, 3, 6, 7, 8}
还有一些常用的命令如下:
Method | Description |
---|---|
add() | 向集合中添加一个元素 |
clear() | 清空集合所有元素 |
copy() | 复制一个集合 |
difference() | 返回两个及其以上集合不同元素的新集合 |
difference_update() | 从此集合中删除另一个集合的所有元素 |
discard() | 如果元素是成员,则从集合中删除该元素。 (如果元素未设置,则不执行任何操作) |
intersection() | 返回两个集合的交集作为一个新集合 |
intersection_update() | 用它自己和另一个的交集更新集合 |
isdisjoint() | 如果两个集合的交集为空,则返回 True |
issubset() | 如果另一个集合包含此集合,则返回 True |
issuperset() | 如果此集合包含另一个集合,则返回 True |
pop() | 移除并返回一个任意的集合元素。如果集合为空,则引发 KeyError |
remove() | 从集合中移除一个元素。如果元素不是成员,则引发 KeyError |
symmetric_difference() | 将两个集合的对称差作为新集合返回 |
symmetric_difference_update() | 用它自己和另一个的对称差异更新一个集合 |
union() | 返回新集合中集合的并集 |
update() | 用它自己和其他元素的并集更新集合 |
- 我的微信
- 微信扫一扫加好友
- 我的微信公众号
- 扫描关注公众号