首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

开源图书《Python完全自学教程》第5章

本章的“容器”,也是一种归类方式,一般认为包括列表、元组和字典、集合(含可变集合和不变集合),前两种对象已经第4章学习过,这里将开始学习后两种。诚然,读者也可以创造其他的归类方式。...“键”必须是不可变对象——如果书的目录名称会变化,那就不仅仅是眼花缭乱,而是手忙脚乱了。 “值”可以是 Python 任何类型对象。 “值”可以重复。...至此,已经学过的 Python 内置对象类型,能够作为键值“键”的有:数字(整数、浮点数、复数)、字符串、元组。...简要说明: hash:翻译为“”或“哈希”,“hashable”意即“可”、“可哈希”。截止目前,已经学习过的 Python 内置对象,数字、字符串、元组都是可的,也是不可变对象。...unhasable:翻译为“不可”、“不可哈希”,此前学过的列表和现在学习的字典,都是此类型的对象,同时为可变对象。 所以,字典也不能作为键值的键。

63820

Python的可对象

这里先介绍Python语言中的可对象函数 介绍列表以及它在Python的实现之前,先简要说明函数及其工作原理。...特别注意,Python的hash()函数返回的是整数对象,这些对象标准的64位Python 3解释器始终以24个字节表示。 如上述代码,默认情况下,整数的值是其本身。...从文档可知,如果两个对象相等,它们的必须相等,或者说,如果两个对象已经通过==返回了True,就说明它们的值相等。...这是因为,自从Python3.3之后,对于字符串和字节对象进行处理之前,先增加了一个随机值,形象地说就是“加了一小撮盐”。“加盐”之后的字符串就变成了随机值。...可类型 Python内置的对象类型,并非都是可的,只有那些不可变对象,比如整数、浮点数、字符串、元组等,才是可的。

5K20
您找到你想要的搜索结果了吗?
是的
没有找到

Scrapy实战3:URL去重策略

方法,将访问过的ur通过hash函数映射到某一位 # 5. bloomfilter方法 bitmap进行改进,多重hash函数降低冲突 三、看代码,边学边敲边记url去重策略 1.将访问过的ur保存到数据库...# 创建md5对象 md5_obj = hashlib.md5() # 进行MD5加密前必须 encode(编码),python里默认是unicode编码必须转换成utf-8 # 否则报错:TypeError...(英语:Hash function)又称算法、哈希函数,是一种从任何一种数据创建小的数字“指纹” 的方法。...好的函数输入域中很少出现冲突。列表和数 据处理,不抑制冲突来区别数据,会使得数据库记录更难找到。...''' 5.bloomfilter方法 bitmap进行改进,多重hash函数降低冲突 # 维基百科看Bloomfilter ''' # 基本概述 如果想判断一个元素是不是一个集合里,一般想到的是将集合中所有元素保存起来

1.9K30

轻松初探 Python 篇(五)—dict 和 set 知识汇总

假设我们需要根据公司名字查找公司地址,按照我们之前的写法,我们需要先建立两个 list ,一个存储公司名字,一个存储公司总部地址,然后查找公司名字,记录好列表位置,再从地址列表查找到具体元素,你还得保证两个表元素位置必须一一应...通过一个函数来计算每一个 key 应该存放在内存的位置,然后把 value 存储在内存的这个位置上,等到需要取出 key 对应的 value 的时候,只需要通过函数计算出这个位置,然后直接去拿就行了...通过函数求出的最终值就是对应的哈希值(Hash),Java 的 Map 最常用的实现 HashMap 也是用类似的原理来设计的。...print(k, v) ... a 1 c 3 b 2 细心的同学一定发现了迭代的顺序和我们初始化定义的顺序是不同的,之前也提到了,dict 内部存放顺序是根据函数决定的,所以最后的存放顺序不一定和插入顺序一致...注意:key 必须是不可变对象(字符串,整数等),如果 key 是 list,就会报错 TypeError: unhashable type: 'list',tuple 虽然是不可变对象,但如果传入的

73590

数据结构-Hash常见操作实践

当要查看某个图片是不是图库的时候,我们先通过哈希算法这个图片取唯一标识,然后列表查找是否存在这个标识。...进行文件系统同步、备份等工具时,使用算法来标志文件唯一性能帮助我们减少系统开销,这一点很多云存储服务器中都有应用。...进行计算之前原始文本进行修改,或是加入额外的运算过程(如移位)# 构造函数def hash(a): return (a + 2 + (a << 1)) % 8 ^ 5# 测试函数功能...如果要判断两个对象是否真正相等,必须通过equals方法。思考一下下面问题使用HashMap存储对象key进行哈希算法,可能会出现碰撞,那么如何解决碰撞呢?...四.最好密码验证次数进行限时间段限制。2.实际开发,我们应该如何用哈希算法解决问题?实际开发要权衡破解难度和计算时间来决定究竟使用哪种加密算法。

66820

哈希表(列表)原理详解

查找:哈希表,又称为,是一种更加快捷的查找技术。我们之前的查找,都是这样一种思路:集合拿出来一个元素,看看是否与我们要找的相等,如果不等,缩小范围,继续查找。...法:元素特征转变为数组下标的方法。 我想大家都在想一个很严重的问题:“如果两个字符串哈希对应的位置相同怎么办?”,毕竟一个数组容量是有限的,这种可能性很大。...列表的查找步骤 当存储记录时,通过函数计算出记录的地址 当查找记录时,我们通过同样的是函数计算记录的地址,并按此地址访问该记录 关键字——函数(哈希函数)——地址 优点:一一的查找效率很高...称为随机探测。 (3)再哈希。就是当冲突时,采用另外一种映射方式来查找。 这个程序是通过取模来模拟查找到重复元素的过程。对待重复元素的方法就是再哈希当前key的位置+7。...如果两边一样多,比如两个位置都为空或者都存储了一个key,就把新key 存储左边的T1子表,2-left也由此而来。查找一个key时,必须进行两次hash,同时查找两个位置。

7.8K42

Redis:09---Hash对象

一、哈希对象简介 几乎所有的编程语言都提供了哈希(hash)类型,它们的叫法可能是哈希、字典、关联数组 哈希又称 Redis哈希类型是指键值本身又是一个键值结构,形如value={{field1...一些特点: 存储多个键值之间的映射,并且键值不允许重复 某一个固定的key,其对应value的field也不允许重复 存储的值既可以是字符串也可以是数字值 用户同样可以对存储的数字值执行自增操作或自减操作...因为“文档、行、”这三者都允许用户同时访问或修改一个或多个域 注意:哈希类型的映射关系叫作field-value,注意这里的value是指field对应的值,不是键对应的值,请注意value不同上下文的作用...当field个数超过512,内部编码也会由ziplist变为hashtable 四、字符串和的比较与选择 的优点 的最大优势,只需要在数据库里面创建一个键,就可以把任意多的字段和值存储到里面...当然,用户也可以选择把数据存储,然后将类似 SETRANG E、GETRANGE 这样的操作交给客户端执行 如果程序需要存储的数据项比较多,并且你希望尽可能地减少存储数据所需的内存,就应该优 先考虑使用

91620

解码:哈希算法如何工作的示例

好吧,那可能太过分了,但你明白了,吗?我们得到算法的原因之前,为什么它在那里,以及它是如何工作的,重要的是要了解其螺栓和螺栓的位置。让我们从哈希开始吧。 什么是哈希?...完全是荒谬的,不切实际的,而且坦率地说,无聊地验证每一封信,吧?好吧,这就是哈希发挥作用的地方。 使用选择的算法,数据被压缩为固定大小。让我们通过一个例子来理解这一点。...不可逆性指出这样一个事实:一旦你某些东西进行,就无法回头了。与加密和编码不同,您无法轻松解除消息/数据的。唯一的,因为对于两个不同的数据,没有两个哈希值是相同的。...一般而言,最流行的算法或函数具有160到512位的长度。 现在,让我们继续讨论你一直等待的部分。 什么是哈希算法?它是如何工作的? 正如我们所讨论的,函数位于算法的核心。...但是,要获得预设长度的哈希值,首先需要将输入数据划分为固定大小的块。这是因为函数接收固定长度的数据。这些块称为“数据块”。这在下图中进行了说明。 ? 数据块的大小因算法而异。

1.1K20

一文理解Redis底层数据结构

字典的每一个键都是唯一的,可以通过键查找与之关联的值,并其修改或删除。 Redis的键值存储就是用字典实现的,(Hash)的底层实现之一也是字典。...浮点数进行操作时,也是从字符串转换成浮点数进行计算,然后再转换成字符串进行保存的。 编码转换条件: 如果一个int编码的字符串对象,修改它成非整数值,则对象就会使用raw编码。...编码 使用条件 ziplist 元素数量少于128且所有元素成员的长度小于64字节 skiplist 不满足上述条件的其他情况 对象 对象编码可以是ziplist或者hashtable. ziplist...编码下的哈希对象,使用了压缩列表作为底层实现数据结构,用两个连续的压缩列表节点来表示哈希对象的一个键值。...哈希结构本身在结构上和字典颇为相似,因此哈希对象的每一个键值都是字典的一个键值。 字典的每一个键都是一个字符串对象对象中保存了键值的键。

1K10

DotNet加密方式解析--加密

这一次将会主要讲解.NET的加密方式,接下来将会分别介绍加密,对称加密,非对称加密等等加密方式.NET的应用,本文主要讲解散加密.NET的应用实例。...2.DotNet的算法种类:     .NET,常用的算法种类有如下几种: ?     以上列举的几种算法,MD5是.NET含有的最快的算法。...二.DotNet算法应用解析:    以上算法,以及算法.NET中分类做了一个简单的介绍,接下来我们具体看一下再.NET实现这几种算法的类。    ....NETSystem.Security.Cryptography命名空间下的HashAlgorithm类,表示所有加密哈希算法实现均必须从中派生的基类。有如下类结构: ?    ...HashCore()将写入对象的数据路由到哈希算法以计算哈希值,HashFinal()加密流对象处理完最后的数据后完成哈希计算。

1.1K80

python 字典实现的原理与探析

计算机体系,我们经常可以观察到一种一一应关系的存在,比如硬件设备的ip地址和mac地址。...,吧~ [映射关系.png] python,有一种容器,名为dict正是这么做的,其中的每个元素就是一个key:value键值,通过指定的key可以找到value。...开发者们是怎么这个结构进行优化的呢?对于同样是开发者的我们又有什么借鉴意义呢?...即在python的字典其内部使用的数据结构是哈希表 所谓哈希 哈希其实是音译的,其实就是hash,也是的意思,简单来说就是,通过这个函数能使一个数据序列的访问过程更加迅速有效,通过函数,... python ,每一个PyDictObject对象的变化,entry的状态会在不同的状态间转换。基本上如下四种状态中转换:Unused、Active、Dummy 和Pending。

1.1K10

特征工程之类别特征

如果我们看到k-1位是零,那么最后一位必须是1,因为变量必须具有k个值的一个。在数学上,可以写下这个约束条件为“所有位的和必须等于1”。 等式 5-1. 独热编码e1,e2,e3限制条件。...特征进行哈希--在线性回归中特别常见 b. bin-counting--在线性回归中与树模型都常见 使用one-hot编码是可行的。...来自雅虎的研究人员 通过特征方式[Weinberger et al.2009年]。尽管McMahan等人[2013]谷歌的广告引擎上尝试了功能哈希,并没有找到显着的改进。...函数可以为任何可以用数字表示的对象构造(对于可以存储计算机上的任何数据都是如此):数字,字符串,复杂的结构等。 图5-2 哈希编码 当有很多特征时,存储特征向量可能占用很多空间。...特征将原始特征向量压缩为m维通过特征ID应用函数来创建矢量。例如,如果原件特征是文档的单词,那么版本将具有固定的词汇大小为m,无论输入中有多少独特词汇。

83310

系统设计:URL短链设计

我们将在这里探讨两种解决方案: A.编码实际URL 我们可以计算给定URL的唯一(例如MD5或SHA256等)。然后可以对进行编码以显示。...如果我们使用MD5算法作为函数,它将生成一个128位的值。base64编码之后,我们将得到一个超过21个字符的字符串(因为每个base64字符编码哈希值的6位)。...我们不仅没有URL进行编码,而且不必担心重复或冲突。KGS将确保插入密钥数据库的所有密钥都是唯一的 并发会导致问题吗?一旦使用了密钥,就应该在数据库进行标记,以确保不再使用该密钥。...例如:我们决定将所有以字母“E”开头的URL放在DB分区,但后来我们意识到,我们有太多以字母“E”开头的URL。 B基于的分区:在这个方案,我们存储的对象进行。...然后根据列计算要使用的分区。我们的例子,我们可以使用“key”或实际URL的来确定存储数据对象的分区。

5.9K164

特征工程(四): 类别特征

虚拟编码和单热编码都是Pandas以pandas.get_dummies的形式实现的。 表5-2 3个城市的类别进行dummy编码 ? 使用虚拟编码进行建模的结果比单编码更易解释。...函数可以为任何可以用数字表示的对象构造(对于可以存储计算机上的任何数据都是如此):数字,字符串,复杂的结构等。 ? 哈希编码 当有很多特征时,存储特征向量可能占用很多空间。...特征将原始特征向量压缩为m维通过特征ID应用函数来创建矢量。 例如,如果原件特征是文档的单词,那么版本将具有固定的词汇大小为m,无论输入中有多少独特词汇。...例5-3 单词的特征哈希 ? 功能的另一个变体添加了一个符号组件,因此计数也是从哈希增加或减少。 这确保了内部产品之间特征与原始特征的期望值相同。 ?...在这种方法,所有类别,罕见或频繁类似通过多个函数进行映射,输出范围为m,远小于类别的数量,k。 当检索一个统计量时,计算所有的哈希值该类别,并返回最小的统计量。

3.2K20

特征工程:Kaggle刷榜必备技巧(附代码)!!!

虽然我们可以使用一个热编码使用1023的具有1024个级别的进行编码,但是使用二进制编码,我们可以通过使用10来完成。 让我们说我们的FIFA 19球员数据中有一包含所有俱乐部名称。...我们可以很容易地使用category_encoders的“二进制编码器”对象这个变量进行二进制编码: ? ?...▍哈希编码器 可以将哈希编码器视为一个黑盒函数,它将字符串转换为0到某个预定值之间的数字。...它与二进制编码器不同,因为二进制编码,两个或多个俱乐部参数可能是1,而在哈希只有一个值是1。 我们可以像这样使用哈希: ? ? 一定会有冲突(两个俱乐部有相同的编码。...尝试之前,你将无法知道转换的工作原理或什么编码效果最佳。它总是时间和效用之间进行权衡。 有时,特征创建过程可能会花费大量时间。在这种情况下,你可能希望将你的Pandas功能并行。 —End—

4.9K62

Java面试题总结--(1)Javaequals方法和hashCode方法的异同

首先呢,说hashCode方法之前,先说说哈希表,有助于我们理解下文: 列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。...给定表M,存在函数f(key),任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。...hashcode值,如果table没有该hashcode值,它就可以直接存进去,不用再进行任何比较了;如果存在该hashcode值, 就调用它的equals方法与新元素进行比较,相同的话就不存了,不相同就其它的地址...下面这段话摘自Effective Java一书: 程序执行期间,只要equals方法的比较操作用到的信息没有被修改,那么这同一个对象调用多次,hashCode方法必须始终如一地返回同一个整数。...所以如果你的hashCode方法依赖于对象易变的数据,用户就要当心了,因为此数据发生变化时,hashCode()方法就会生成一个不同的码”。

47410

Data Encryption 你还在用NPM依赖吗?有 Crypto 就够了!

(哈希)算法 算法也叫哈希算法,用来把任意长度的输入变换成固定长度的输出,常见的有md5,sha1等 相同的输入会产生相同的输出 不同的输出会产生不同的输出 任意的输入长度输出长度是相同的 不能从输出推算出输入的值...2.1 获取所有的算法 console.log(crypto.getHashes()); 2.2 语法说明 crypto.createHash(algorithm);//创建HASH对象 hash.update...'hello');//指定要摘要的原始内容,可以摘要被输出之前使用多次update方法来添加摘要内容 var result = md5Sum.digest('hex');//摘要输出,使用digest...HMAC算法 HMAC算法将算法与一个密钥结合在一起,以阻止签名完整性的破坏 3.1 语法 let hmac crypto.createHmac(algorithm,key); hmac.update...签名 在网络,私钥的拥有者可以一段数据被发送之前先对数据进行签名得到一个签名 通过网络把此数据发送给数据接收者之后,数据的接收者可以通过公钥来该签名进行验证,以确保这段数据是私钥的拥有者所发出的原始数据

83720

什么是区块链:块的结构

有3种不同的元数据集: 前面的块。请大家记住,区块链,每个区块都从前一个区块继承,因为我们使用前一个块的的哈希来创建新区块的哈希。对于每一块N,我们为它提供N-1个块。 挖矿比赛。...它是一个用来总结块事务的数据结构。我们随后再详细讨论。 块标识符 要识别一个块,你会得到一个加密,一个数字签名。这是通过SHA256算法块头进行两次HASH后创建的。...每个块使用前面块的哈希来构造它自己的哈希。块是唯一的标识符,你不会找到相同标识符的哈希块。 另一个标识特定块的方法是块高度。这是指示区块链块的位置。我们样例的块是500312的位置。...梅克尔树 Merkle Trees 块的事务包含在称为Merkle树或二叉树哈希树的结构。我想这样来讲的话会更容易理解,那就是来编码说明。...一个Merkle树通过节点进行递归哈希构造,直到只有一个,称为root或merkle根。如果我们留在比特币的世界,那么使用的密码哈希算法是SHA256。每次应用两次。

2.7K60

hashCode()与equals()的区别

1. hashCode()介绍: hashCode()的作用是获取哈希码,也称为码;它实际上是返回一个 int 整数。这个哈希码的作用是确定该对象哈希的索引位置。...hashCode()定义JDK的Object 类,这就意味着Java的任何类都包含有hashCode()函数。...public native int hashCode(); 列表存储的是键值(key-value),它的特点是:能根据“键”快速的检索出对应的“值”。这其中就利用到了码!...3.为什么重写equals()时必须重写hashCode()方法? 如果两个对象相等,则hashcode一定也是相同的。两个对象相等,两个对象分别调用 equals()方法都返回 true。...也就是说,当我们某个元素进行哈希运算,得到一个存储地址,然后要进行插入的时候,发现已经被其他元素占用了,其实这就是所谓的哈希冲突,也叫哈希碰撞。

67630
领券