美文网首页生信程序员Python全栈工程师
61、set常用方法及高性能原理(hash)

61、set常用方法及高性能原理(hash)

作者: BeautifulSoulpy | 来源:发表于2019-06-03 15:32 被阅读0次
很多时候,我们缺的不是能力,
而是如蜗牛般的毅力和坚持。
蜗牛,它虽然爬得很慢,
但它一直坚持前进~
对于程序而言,每一种数据和算法原理都应该是我们要掌握的最重要的东西;
1.集合set:

1.集合(set)是一个无序不重复元素的序列。
2.基本功能是进行成员关系测试和删除重复元素。
3.可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

# 集合的定义
set1 = set()  #定义一个空的集合
set2 = {1,2,3}      |    

# set 与 dict 的区别;
s={1,2,3}  #set
s={} # 字典;   

s6={(1,2),3,'a'}
type(s6)  |    set

# 报错就是不可哈希;不报错就是可哈希;所以哈希是个神奇的东西!
hash(1)    |    1
hash((2,3,'   abc'))
-------------------------------
-2693498530996980930

2. set 的增、删、查、改;

增加一个元素
set1.add(5)  #增加多个:

update(*other)合并其他元素到set中去, *other对象必须是可迭代对象;
set1.update([5,6,7,8])

删除某个值 remove()、discard(elem)、pop()、clear();
set1.remove(1)    #从set中移除一个元素,元素不存在,出KeyError,为什么是KeyError ?
set1.discard(1)    #从set中移除一个元素,元素不存在,什么都不做;
pop() ->item   #移除并返回任意的元素,为什么是任意元素? 空集返回KeyError异常;
clear()  #移除所有元素;

查:无法通过下标索引

改:不可变类型无法修改元素

总结:
1.set的无序是与hash有关的;计算和hash值太大了,找不到规路;
2.set 一定是去重复的结果;
2. list与set性能测试比较——hash算法(散列算法)的优势:
hash算法优势原因_总结:(hash本质是一种计算公式)
1. 非线性结构set()、dict()效率非常高;大量的元素用在了缓存,不会因为你的元素多了,性能就下降了;
2. set中元素为一个Key,一个Key的hash值是唯一的,不可重复的;set找东西是因为这个唯一值相当于一个唯一编号;找东西特别快;
3.hash就是一种数学公式,计算速度特别快;算完后直接拿这个值;规模再大,也不影响hash的计算;(本质上:相当于利用索引来进行计算;hash是一个O(1)问题) 
4.hash算法有可能出现冲撞的情况, 编号重复就相当于同一个Key;
5.hash算法的优势:散列算法(有某种规路)—位的变化也可以引起hash的变化

lst1=list(range(100))
lst2=list(range(1000000))
%timeit (-1 in lst1)
%timeit (-1 in lst2)
----------------------------------------------------------------
1.56 µs ± 107 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
15.4 ms ± 1.06 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)


lst1=set(range(100))
lst2=set(range(1000000))
%timeit (-1 in lst1)
%timeit (-1 in lst2)
-----------------------------------------
65.4 ns ± 9.19 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
55 ns ± 2.22 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

hash散列算法(有某种规路)—位的变化也可以引起hash的变化
hash(0b1110)    |    14
hash(0b1111)    |    15

相关文章

  • 61、set常用方法及高性能原理(hash)

    1.集合set: 1.集合(set)是一个无序不重复元素的序列。2.基本功能是进行成员关系测试和删除重复元素。3....

  • Redis学习笔记(一)

    Redis常用数据结构包括string、link、set、order set、hash 一、string结构及命令...

  • Redis笔记

    五种数据类型介绍 常用的类型主要是 String、List、Hash、Set、ZSet 这5种。 注意:set方法...

  • Redis学习笔记

    Redis常用数据类型包括:string(字符串),list(链表), Hash(哈希),set(集合)及zset...

  • Redis - 数据类型

    key类型:Stringvalue类型:常用:String、List、Set、Sortedset、Hash非常用:...

  • RedisTemplate常用方法总结

    Redis常用的数据类型 String Hash List Set zSet Sorted set String类...

  • vue-routes 基础(二)

    hash / history 原理及区别 原理 hash 模式:用hash值模拟路由变化,通过监听hashchan...

  • Java之Collection

    Collection接口介绍常用Set原理分析常用Queue原理分析常用List原理分析 Collection接口...

  • 11.5-Set操作和高性能原理(hash)

    很多时候,我们缺的不是能力,而是如蜗牛般的毅力和坚持。蜗牛,它虽然爬得很慢,但它一直坚持前进~ hash:得到一个...

  • Android 技能图谱学习路线

    Java基础 Java Object类方法 HashMap原理,Hash冲突,并发集合,线程安全集合及实现原理 H...

网友评论

    本文标题:61、set常用方法及高性能原理(hash)

    本文链接:https://www.haomeiwen.com/subject/zpmcxctx.html