set()集合的概念、方法和操作

xiaoxiao2021-02-28  119

额…..继续整理笔记,set集合方法等,下次不用到处乱翻了..常见的应该就这些了吧……心虚…..

1.概念

python中集合概念和数学中一致,由一个或多个确定的元素构成的整体叫集合.

集合中元素是唯一的,无序的,集合中元素为不可迭代对象,即非列表和字典.

python 中 set 集合分为 可变集合set()和不可变集合frozenset()两种

所以同样,set中元素也不能为一个set,但是可以是一个frozenset

set() 创建(可变集合)

用{}表示,类型为set(),与字典不同的是集合set内部是单独元素来表示,而非键值对的形式

>>> a = ('a', 'b', 'v') >>> b = set(a) #tuple转set >>> b {'v', 'a', 'b'} >>> type(b) <class 'set'> >>> c = set() #创建空集合 >>> type(c) <class 'set'>

2.set的方法

set.add (x)

添加元素

>>> b.add('bb') >>> b {'v', 'a', 'bb', 'b'}

set.remove(x)

删除元素

>>> b.remove('bb') >>> b {'v', 'a', 'b'}

set.update(set2)

将set b合并到set a中

>>> b {'v', 'a', 'b'} >>> a = {1,2,3} >>> a {1, 2, 3} >>> b.update(a) # 将set a合并到set b中 >>> b {1, 'v', 'a', 2, 3, 'b'} # b变化 >>> a # a保持 {1, 2, 3}

set.pop()

与列表pop和字典popitem方法类似,效果都是移除其中元素并返回移除元素的值

由于set集合和dict字典类似都是无序的,并且set中只有值无key,所以移除时为随机移除

>>> a {1, 2, 3} >>>b = a.pop() >>>b 1 >>>a {2,3}

set.clear()

与列表和字典clear方法类似,效果都是清空内部元素,并保留空集合

>>> a.clear() >>> a set()

set.copy()

返回一个浅复制副本 >>> e = a.copy() >>> e {1, 2, 3}

set.discard(obj)

和remove方法一样,都是移除set中的元素,

不同之处在于remove参数必须实际存在于set中,否则报错

而discard方法中,参数存在则移除,不存在也不会报错

>>> e {1, 2, 3} >>> e.discard(3) # 存在3则移除 >>> e {1, 2} >>> e.discard(3) # 移除元素,即使不存在也不报错 >>> e.remove(3) # 用remove移除不存在的元素,则报错 Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 3

3. frozenset() 不可变集合

顾名思义,不可变集合,就是不可更改的集合了,创建后就不可更改了,所以也就没有各种方法了.因此,frozenset做为可哈希对象,具有不可变特性,自然也就可以作为字典key

tag:

python中所有不可改变的的对象,如字符串,元组tuple,不可变集合frozenset都是可哈希的

同样也就是说,可改变的容器如字典dict,列表list,可变集合set 则不可哈希unhashable

>>> d = forzenset() # 创建一个空的不可变集合 >>> d forzenset() >>> d.add(1) # 不可修改,这里就报错了 Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'frozenset' object has no attribute 'add' >>> hash(d) # 做为一个可哈希的对象,拥有固定的哈希值 133156838395276 >>> hash(b) # b是一个set,是一个可变集合,非固定,所以就没有hash值了,同样会提示报错 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type: 'set'

4.操作

和我们数学中学过的差不多,python中关于集合set的操作,一般有并集,交集,差集,对称差集子集,超集等

并集

union 或者 | (管道符)

>>> a = set([1,2,3]) >>> a {1, 2, 3} >>> b = set([3,4,5]) >>> b {3, 4, 5} >>> a.union(b) # 并集 {1, 2, 3, 4, 5} >>> a|b # 符号简写形式 {1, 2, 3, 4, 5}

交集

intersection 或者 & (and符)

>>> a.intersection(b) #交集 {3} >>> a & b #简写 {3}

差集

difference 或者 - (减号)

>>> a.difference(b) # a-b的差集 {1, 2} >>> b.difference(a) # b-a的差集 {4, 5} >>> a-b #简写 {1, 2} >>> b-a #简写 {4, 5}

对称差集

symmetric_dfifference 或者 ^ 符 即除去交集部分

>>> a.symmetric_difference(b) {1, 2, 4, 5} >>> a^b {1, 2, 4, 5}

子集

issubset 或 <

>>> d = {1,2} >>> d.issubset(a) True >>> d<a True

超集

issuperset 或 >

>>> a.issuperset(d) True >>> a>d True
转载请注明原文地址: https://www.6miu.com/read-96278.html

最新回复(0)