python set 知多少

您所在的位置:网站首页 v105和v105s怎么区分 python set 知多少

python set 知多少

2023-08-06 18:53| 来源: 网络整理| 查看: 265

各种资源搜索下载!18元 购买联系QQ:1435216645

很好用的python set 1.python set的基本使用方法1.python set 支持的对象1.1 set可针对一维list或者array1.2 mat类型及超过一维list、array均不支持 2.使用set()对整型list排序3.两个set的运算3.1 两个列表的交集 (与)3.2 两个列表的并集(或)3.3 差集:在列表A,而不在列表B3.4 补集:在列表A,不在列表B 或 在列表B,不在列表A (异或) 4.见证set的速度参考文献

为什么要在python中使用set?

一个字:快。

1.python set的基本使用方法

和list大致类似,详见参考文献1.

方法功能set()初始化len(s)集合s中元素的数量add(elem)将元素 elem 添加到集合remove(elem))从集合中移除元素 elem。 如果 elem 不存在于集合中则会引发 KeyErrordiscard(elem)如果元素 elem 存在于集合中则将其移除pop()从集合中移除并返回任意一个元素。 如果集合为空则会引发 KeyErrorclear()从集合中移除所有元素 1.python set 支持的对象 1.1 set可针对一维list或者array import numpy as np cc=[[1,2,3,4,5,6,4,6]] #这里相当于是二维 aa=cc[0] #需要进行如下操作才可以使用set函数 set(aa) #Out: {1, 2, 3, 4, 5, 6}

或:

aa=np.array(cc[0]) set(aa) 1.2 mat类型及超过一维list、array均不支持

如:

import numpy as np cc=[[1,2,3,4,5,6,4,6]] aa=cc 或者 aa=np.array(cc) set(aa)

则提示错误:

TypeError: unhashable type: 'list' 或者 unhashable type: 'numpy.ndarray' 2.使用set()对整型list排序

set()集合不仅可以删除list中重复的元素,而且还集成了自动升序排序的功能。还是蛮强大的。

但这里有一个坑,当整型list中有负元素时…

在这里插入代码片 a=[3,5,2,8,6,0] #a=[3,5,2,8,6,0,-2] b=[7,6,8,3,1] a.extend(b) print(list(set(a))) #输出结果为: #[0, 1, 2, 3, 5, 6, 7, 8]

但是如果集合中存在负整数:

在这里插入代码片 #a=[3,5,2,8,6,0] a=[3,5,2,8,6,0,-2] b=[7,6,8,3,1] a.extend(b) print(list(set(a))) #神奇的一幕出现了 #输出为:[0, 1, 2, 3, 5, 6, 7, 8, -2]

这一点有点坑。

因此保险的方式还是再用一次sort()或sorted()刷一遍吧。

3.两个set的运算

在这里插入图片描述

A=[1,2,3] B=[3,4,5] 3.1 两个列表的交集 (与) print([i for i in A if i in B]) print( list(set(A).intersection(B))) print(list(set(A) & set(B))) #out: [3] [3] [3] 3.2 两个列表的并集(或) print( list(set(A+B))) print( list(set(A).union(B))) print(list(set(A) | set(B))) #out: [1, 2, 3, 4, 5] [1, 2, 3, 4, 5] [1, 2, 3, 4, 5] 3.3 差集:在列表A,而不在列表B print(list(set(A)-set(B))) print(list(set(A).difference(set(B)))) #out: [1, 2] [1, 2] 3.4 补集:在列表A,不在列表B 或 在列表B,不在列表A (异或) print(list(set(A)^set(B))) #out: [1, 2, 4, 5] 4.见证set的速度

随机生成两个大列表a,b,逐个判断b中元素是否在a中,并返回结果。

import numpy as np a=np.random.randint(0,10000,10000000).tolist() b=np.random.randint(0,10000,10000).tolist()

如果用直接用list:

import time t0=time.time() res=[] for item in b: res.append(item in a) t1=time.time() print(t1-t0) #out: 2.1071205139160156

如果通过set进行查找:

import time st=set(a) t0=time.time() res=[] for item in b: res.append(item in st) t1=time.time() print(t1-t0) #out: 0.0030002593994140625

可见,通过set进行元素查找效果很高。

参考文献

[1] https://docs.python.org/zh-cn/3.9/library/stdtypes.html?highlight=set#set



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3