一文结合Python实例灵活掌握Set

已收录   阅读次数: 467
2021-01-0817:49:00 发表评论
摘要

此前,介绍了Python的基础知识以将来编写爬虫脚本,具体可以参看下方的前情提要。本篇文章则是要着重讲解一下Python中有关Set的用法,在结合实际案例中以讲解明白,为将来在使用爬虫过程中灵活运用,分享给大家……

分享至:
一文结合Python实例灵活掌握Set

开篇寄语

此前,介绍了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}

还有一些常用的命令如下:

MethodDescription
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()用它自己和其他元素的并集更新集合
  • 我的微信
  • 微信扫一扫加好友
  • weinxin
  • 我的微信公众号
  • 扫描关注公众号
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: