今天做了一个Python脚本,功能是比较两个漏扫结果表(第一次扫描结果、第二次扫描结果)
找出当中的三种类型的漏洞:
我一开始的思路就是
这样子的话要循环很多次,效率会很低
而Boss给了我一个思路,说他之前写的漏洞情况比较,用了set数据类型,操作起来很方便。
So,Let’s start.
Unordered collections of unique elements
去重的无序集合
定义很重要
原来set根据能否修改的特点还分两种:
可变的set
比ImmutableSet
多了这些方法,这让我联想到最近看的fluent python
中的一张图,
本来还想说set的缺点就是无序,会出现图的这种乱序现象。
看了set的定义后,才知道是我自己的对set
这个data model不了解
人家本来就是去重的无序集合 Unordered collections of unique elements
每次你需要比较一条数据的时候都要循环second_list一次,即100次
要比较完所有first_list中的数据的话,你总共需要循环100*100次
相比这种遍历的比较方式,相当于是自己定义的函数,肯定不及内置类型自带的方法快。
因为built-in type 及其方法 is implemented in C.
比如要你用了built-in type,你要计算数据的长度,你调用len()
方法,它会走short-cut直接返回ob_size
#获取两个list 的交集
def same(a,b):
return list(set(a).intersection(set(b)))
#获取两个list 的并集
def union(a,b):
return list(set(a).union(set(b)))
#获取两个list 的差集 a中有而b中没有的
def diff(a,b):
return list(set(a).difference(set(b)))
a:第一次扫描结果
b:第二次扫描结果
先了解你的数据,再考虑需要用什么数据类型来存储
数据结构这个时候好像变得重要了起来啊….
看来有相关开发经验确实可以少走很多坑
姜还是老得辣啊。。。