​ Python中常见的数据结构可以统称为容器。序列(如列表和元组)、映射(如字典)以及集合(set)是三类主要的容器。线性数据结构分类:栈(stack)--先进后出、 队列(queue)-先进先出、双端队列(deque)、链表(LinkedList)。

常见的数据类型又分为:数字、字符串、元组、列表、字典、集合。

可变数据类型

    列表、字典、集合         不可哈希
不可变数据类型元组、数字、字符串         可哈希
可哈希对象是对象拥有__hash__(self)内置函数的对象。对于可哈希的对象执行这个函数将会返回一个整数。
可哈希对象判断相等的唯一条件就是两者 的哈希值相等。下面通过一个例子来说明:
tuple_a = (1, 2, 3)    # 元组a
dict_b = {"a": 1, "b": 2}    # 字典b
dict_c = {"b": 2, "a": 1}    # 字典c
print(tuple_a.__hash__)
print(dict_b.__hash__)
print(id(str(sorted(dict_b))))
print(id(str(sorted(dict_c))))
print(hash(str(sorted(dict_b))))
print(hash(str(sorted(dict_c))))
>>>    <method-wrapper '__hash__' of tuple object at 0x00000275A3DF6C18>>>>    None>>>    2704397351728
>>>    2704397351728
>>>    -589638267386482414
>>>    -589638267386482414我们可以输出结果中元组返回了一个对象的'__hash__'method,而字典返回的结果None;字典是不能hash的,
但是我们可以将字典转成字符串再进行hash,sorted是将字典进行排序,
返回的结果显示两者转成字符串后的id跟hash值都是一样的,间接的说明了字典b跟字典c也是相等的
(补充:sorted:适用于任何可迭代容器)

哈希有啥作用?

它是一个将大体量数据转化为很小数据的过程,甚至可以仅仅是一个数字,以便我们可以用在固定的时间复杂度下查询它,所以,哈希对高效的算法和数据结构很重要。Python 中基于hash的2个数据类型是dict and set , 之前说dict查询速度快,为何快? 说set天生去重,怎么做到的?其实都是利用了hash的特性,我们下面来剖析dict 为何查询速度超快,且不受dict大小影响 ?

解析:假设我要存14亿人的基本信息

data = {

"张三":[23742364782642342323234,28,"山东济南"],

"李四":[12124234232311214458271,25,"北京昌平"],

"王五":[23030293483727384383929,33,"山东济南"],

"赵六":[42302033030302482634674,28,"河北保定"],

... ...

}

dict 的每个key 都要先经过hash生成一段固定长度的hash值,假设生成的hash值如下dict会把这些数字按大小排序好放在一个列表里kd = [53, 67, 81, 99]

当我们想查找"赵六"的信息时, 会把“赵六”先hash, 得到99这个值,然后拿这个值去到kd列表里找,想象这个列表有14亿个值 ,如何快速找到99? 二分法就行 ,只要找到了99的位置,就可以定位到赵六对应的value的值了。 通过2分法查找,每次数据量都会少一半,这样查找最多31次(2**31=2147483648)就能从20亿信息里找到这个人的信息。当然 dict 真实的查找算法比这个还要复杂些, 我只是通过这个例子让大家理解下为何基于hash的数据类型查找速度会快很多。

set去重是因为每存一个值到set里时, 都要先经过hash,然后通过得出的这个hash值算出应该存在set里的哪个位置,存的时候会先检查那个位置上有没有值 ,有的话就对比是否相等,如果相等,则不再存储此值。 如果不相等(即为空),则把新值存在这。

python 长度queue_python:常见的数据结构相关推荐

  1. Python基础课程-常见的数据结构

    字典 字典是将键(key)映射到值(value)的无序数据结构.值可以是任何值(列表,函数,字符串,任何东西).键(key)必须是不可变的,例如,数字,字符串或元组. 示例 字典:我们查找的单词是ke ...

  2. python常见的数据结构

    Python中常见的数据结构可以统称为容器.序列(如列表和元组).映射(如字典)以及集合(set)是三类主要的容器. 线性数据结构分类:栈(stack)--先进后出. 队列(queue)-先进先出.双 ...

  3. Python中的常见6中数据结构

    python中常见的数据结构有六种:Number(数值),String(字符串),List(列表),Tuple(元组),Dictionary(字典),Set(集合) 1.number数值 Python ...

  4. python快速入门【二】----常见的数据结构

    python入门合集: python快速入门[一]-----基础语法 python快速入门[二]----常见的数据结构 python快速入门[三]-----For 循环.While 循环 python ...

  5. python与js通用的数据结构_常见数据结构和Javascript实现总结

    做前端的同学不少都是自学成才或者半路出家,计算机基础的知识比较薄弱,尤其是数据结构和算法这块,所以今天整理了一下常见的数据结构和对应的Javascript的实现,希望能帮助大家完善这方面的知识体系. ...

  6. byteofpython.info_A Byte of Python 笔记(7)数据结构:列表、元组、字典,序列

    第9章 数据结构 数据结构,即可以处理一些数据的结构.或者说,它们是用来存储一组相关数据的. python 有三种内建的数据结构--列表.元组和字典. list = ['item1', 'item2' ...

  7. 面试中常见的数据结构

    上次在面试时被面试官问到学了哪些数据结构,那时简单答了栈.队列/(ㄒoㄒ)/~~其它就都想不起来了,今天有空整理了一下几种常见的数据结构,原来我们学过的数据结构有这么多~ 首先,先来回顾下C语言中常见 ...

  8. Python中字符串常见操作总结

    Python中字符串常见操作总结: Num01–>find 检测 str 是否包含在 mystr中,如果是,返回开始的索引值:否则返回-1.也可以指定在一定的范围内.mystr.find(str ...

  9. chatgpt赋能python:Python长度转换-从毫米到厘米、米和英寸

    Python长度转换 - 从毫米到厘米.米和英寸 将长度从一个单位转换为另一个单位是编程中常见的任务,尤其是在建筑.制造和工程项目中.Python提供了一种简便的方式来实现这一任务,让我们来看看如何将 ...

最新文章

  1. Velocity(2)——引用
  2. C++中const用于函数重载
  3. 最简单的网络图片的爬取 --Pyhon网络爬虫与信息获取
  4. mysql安装目录问题_Windows下MySQL的安装目录问题
  5. 解决:VS中进行Qt开发,编译时报错:打不开QWidgets.h等文件的问题
  6. CPU性能参数的含义
  7. Markdown制作表格
  8. 部署万兆以太网的十个注意事项
  9. 锤子t1android驱动,锤子坚果R1驱动
  10. linux怎么停止ping命令
  11. Win10-Ubuntu双系统
  12. CH模拟赛 皇后游戏
  13. groupby常用方法
  14. 安装ubuntu 遇到的问题
  15. 蓝牙突然消失,ubuntu连接音箱没有声音问题
  16. 【数字图像处理】直方图均衡化与规定化
  17. 人活着就是在对抗熵增 | 熵增启示录
  18. 一家两制抗风雨 有得有失看未来(转)
  19. IOS-10.0~10.2越狱后使用ssh链接
  20. 空气质量指数日历史数据

热门文章

  1. Spring中Aware的用法以及实现
  2. 这些Windows 10隐藏秘技,你知道几个?
  3. python 正则替换_5分钟速览Python正则表达式常用函数!五分钟就掌握它!
  4. python京东商品_Python爬取京东的商品分类与链接
  5. PHP array_merge()函数与示例
  6. __str__是什么函数_PHP str_shuffle()函数与示例
  7. Java SimpleTimeZone setStartYear()方法与示例
  8. python判断素数程序_使用面向对象方法检查素数的Python程序
  9. oracle光标位置无效,解决在Form表单中光标移动不了问题
  10. java编程求最小公约数_java求最大公约数与最小公倍数