Python数据类型 - set 集合

set 集合


在Python中,set是基本数据类型的一种集合类型。
  • set 数组是一组key值,不包含重复元素。
  • set 数组是可变的、无序的、有限的集合,其元素是唯一的、不可变的。
  • set 数组没有(不支持)索引和切片操作。
set有可变集合(set)和不可变集合(frozenset)两种,其中
  • set:可以原地修改,或者说是可变的,也可以说是 unhashable(不可哈希)的。
  • frozenset:是一个被“冻结”的集合,不能原地修改,是 hashable(可哈希)的。

一、set的创建

(1)直接创建
方式:将所有项(元素)放在花括号“{}”内,以逗号“,”分隔。
集合元素:集合可以有任意数量的元素,它们可以是不同的类型(例如:数字、元组、字符串等)。但是,集合不能有可变元素(例如:列表、集合或字典)。
>>> a = {1,2,3,4,'a'}
>>> type(a)
<class 'set'>
(2)通过set()、frozenset()创建
python中,set类是在python的sets模块中,不需要导入sets模块可以直接创建集合。
>>>set('boy')
set(['y', 'b', 'o'])
(3)创建空的set集合

创建空集合比较特殊。
在 Python 中,空花括号“{}”用于创建空字典。要创建一个没有任何元素的集合,使用set()函数(不要包含任何参数)。

>>> a = set()
>>> a
set()
>>> b = {}
>>> type(a),type(b)
(<class 'set'>, <class 'dict'>)
ps:创建set例子

clipboard.png


二、set操作

(1) in

in关键字,判断某key是否在set中,并返回True or False。

>>> s = set([1,2,3,2,1,3,4,5])
>>> s
{1, 2, 3, 4, 5}
(2)add(key)

add()方法:添加元素到set中。可以重复添加,but没有效果,因为set中元素唯一性,会过滤重复的元素。

>>> s.add(6)
>>> s
{1, 2, 3, 4, 5, 6}
(3)update()

update():将参数添加到set中并返回一个set,自动过滤重复元素。
update()方法既可以带一个单参数,也可以带一个or多个set,就好像多次调用add()。

clipboard.png

(4)remove(key)、discard(key)

remove(key)、discard(key)删除指定元素。
区别:其中remove()删除不存在的key时会返回报错,而discard()不会。

>>> a_set = {1,2,3,6,10,15,21,28,36,45}
>>> a_set
{1, 2, 3, 36, 6, 10, 45, 15, 21, 28}    # 并不一定是按填写的顺序
>>> a_set.discard(10)
>>> a_set
{1, 2, 3, 36, 6, 45, 15, 21, 28}
>>> a_set.remove(21)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 21
(5)pop()

pop()函数不需要带任何参数,将set中的第一个元素删除。

>>> a_set.pop()
1
>>> a_set
{2, 3, 36, 6, 45, 15, 28}
(6)clear()

clear()函数,清空set,集合仍存在,只不过为空集合。

>>> a_set.clear()
>>> a_set
set()
(7)del 删除一个元素

语法形式:del set_name


三、集合操作

set可以看成数学意义上的无序、无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作。

  • 交集:两个set集合之间所有的元素,操作符号为“&”或者intersection()函数;
  • 并集:两个set集合之间共有的元素,操作符号为“|”或者union()函数;
  • 差集:在a集合中但不在b集合中,方法为difference()函数;
  • symmetric_difference():在a集合中不在b集合中 and 在b集合中不在a集合中。
举几个例子:
>>> s1 =set([1,3,6])
>>> s & s1        # and
{1, 3, 6}
>>> s | s1         # or
{1, 2, 3, 5, 6}
>>> a_set = {1,2,3,4,5,6,7,8,9,0}
>>> b_set = {1,2,3,4,5,11,12,13,14,15}
>>> a_set.union(b_set)             # 并集|,或者直接a_set | b_set
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15}
>>> a_set.intersection(b_set)     # 交集&,或者直接使用 a_set & b_set
{1, 2, 3, 4, 5}
>>> a_set.difference(b_set)     # 差集,在a中但不在b中
{0, 6, 7, 8, 9}
>>> a_set.symmetric_difference(b_set) #在a中不在b中 and 在b中不在a中
{0, 6, 7, 8, 9, 11, 12, 13, 14, 15}
  • issubset():判断集合是否为某集合的子集,返回True or False。
  • issuperset():判断集合是否为某集合的父集,返回True or False。

clipboard.png


❤ thanks for watching, keep on updating...
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值