python dict遍历性能,Python:遍历list vs over dict items效率

2023-11-16

这取决于您使用的是哪个版本的Python。在Python 2中,some_dict.items()创建一个新的列表,这将占用一些额外的时间并占用更多的内存。另一方面,一旦创建了列表,它就是一个列表,因此在完成列表创建的开销之后,应该具有相同的性能特征。

在Python 3中,some_dict.items()创建一个视图对象而不是一个列表,我预计在items()上创建和迭代比在Python 2中更快,因为不需要复制任何内容。但我也预计,在已经创建的视图上迭代会比在已经创建的列表上迭代慢一些,因为字典数据存储得有点稀疏,而且我相信python没有好的方法可以避免在字典中的每个bin上迭代,即使是空的。

在Python 2中,一些计时证实了我的直觉:>>> some_dict = dict(zip(xrange(1000), reversed(xrange(1000))))

>>> some_list = zip(xrange(1000), xrange(1000))

>>> %timeit for t in some_list: t

10000 loops, best of 3: 25.6 us per loop

>>> %timeit for t in some_dict.items(): t

10000 loops, best of 3: 57.3 us per loop

在items上迭代的速度大约是后者的两倍。使用iteritems稍微快一点。。。>>> %timeit for t in some_dict.iteritems(): t

10000 loops, best of 3: 41.3 us per loop

但遍历列表本身与遍历任何其他列表基本相同:>>> some_dict_list = some_dict.items()

>>> %timeit for t in some_dict_list: t

10000 loops, best of 3: 26.1 us per loop

Python 3可以比Python 2更快地创建和遍历items(与上面的57.3us相比):>>> some_dict = dict(zip(range(1000), reversed(range(1000))))

>>> %timeit for t in some_dict.items(): t

10000 loops, best of 3: 33.4 us per loop

但是创建视图的时间是可以忽略的;实际上迭代比列表慢。>>> some_list = list(zip(range(1000), reversed(range(1000))))

>>> some_dict_view = some_dict.items()

>>> %timeit for t in some_list: t

10000 loops, best of 3: 18.6 us per loop

>>> %timeit for t in some_dict_view: t

10000 loops, best of 3: 33.3 us per loop

这意味着,在Python 3中,如果希望在字典中的项上迭代多次,并且性能非常关键,那么可以通过将视图缓存为列表来提高30%的速度。>>> some_list = list(some_dict_view)

>>> %timeit for t in some_list: t

100000 loops, best of 3: 18.6 us per loop

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python dict遍历性能,Python:遍历list vs over dict items效率 的相关文章

  • web基础学习(十)CSS3之 @keyframes 、animation

    css3新增属性 keyframes 关键帧 可以帮助开发者不必依赖JavaScript 只使用css代码完成动画制作 那么如何使用 keyframes呢 这里有两个重要知识点 1 keyframes 定义关键帧 语法 keyframes
  • 低功耗技术——流水线设计(加法器和乘法器)

    文章目录 前言 一 流水线 1 16bit加法器 2 无符号4bit乘法器 3 编写一个4bit乘法器模块 并例化该乘法器求解c 12 a 5 b 二 降低FPGA功耗 1 静态功耗 2 动态功耗 前言 2023 3 31 今天学习降低功耗
  • Python——shutil模块

    os模块不仅提供了新建文件 删除文件 查看文件属性的操作功能 还提供了对文件路径的操作功能 但是 对于移动 复制 打包 压缩 解压文件及文件夹等操作 os模块没有提供相关的函数 此时需要用到shutil模块 shutil模块是对os模块中文
  • 秋招-数据结构-链表篇

    秋招 数据结构 链表篇 介绍 链表是一种物理存储单元上非连续 非顺序的存储结构 数据元素的逻辑顺序是通过链表中的指针链接次序实现的 链表由一系列结点 链表中每一个元素称为结点 组成 结点可以在运行时动态生成 每个结点包括两个部分 一个是存储
  • Java 与 区块链技术_java区块链技术有哪些主要的特点和应用

    java区块链技术有哪些主要的特点是什么 人们对于区块链技术比较熟悉 但是却并不知道它到底有哪一些概念 java区块链技术有哪些人有接触过呢 有很多人都会觉得区块链技术就好像是我们最初所认识的互联网一样 要想有效解决陌生人之间的信任问题 首
  • Android零基础—环境搭建

    转载原文 http blog csdn net tangjie134 article details 79481581 1 Android Studio 3 0和SDK获取 方式1 进入 Android Developers官方网站下载 方
  • 在Linux命令行终端中写python代码的简单操作

    Linux终端中的操作均是使用命令行来进行的 因此 对于小白来说 熟记几个基本的命令行和使用方法能够较快的在Linux命令行环境中将python用起来 打开命令行窗口 打开命令行窗口的快捷键如下 Ctrl Alt t 关闭名命令行窗口 关闭
  • 华为消费者算法岗一面二面

    不吹不黑 u1s1 华为是我面的几家公司里面一面二面相对简单的 没怎么问基础知识 对项目的探讨会更多一点 所以其实也看个人 如果有的小伙伴对项目不是很熟 对基础知识比较熟可能会觉得有点难 一面 逐个介绍简历里的项目 然后自己挑一个进行详细介
  • 在外包公司熬了 3 年终于进了字节,竭尽全力....

    其实两年前校招的时候就往字节投了一次简历 结果很明显凉了 随后这个理想就被暂时放下了 但是这个种子一直埋在心里这两年除了工作以外 也会坚持写博客 也因此结识了很多优秀的小伙伴 从他们身上学到了特别多东西 把这次面试分享出来 也是希望可以帮助
  • C语言:函数指针和指针函数学习

    一 指针函数 定义 指针函数就是返回值类型是指针的函数 后面说的是本身是什么 前面说的是返回值类型是什么 声明方法 类型标识符 函数名 参数列表 int fun int x int y int fun int x int y int fun
  • 使用C++来创建界面

    上节讲到 Qt 支持两种创建界面的方式 一种是使用C 代码 Qt 自诞生以来就支持 另一种是使用 QML 可以创建个性化的界面 Qt 提供了多种工程类型 选择不同的工程类型将导致使用不同的方式来创建界面 本节先讲解C 的使用 首次打开Qt
  • netty 无阻塞队列 MpscArrayQueue,一个字就是快

    netty提供了高效的线程安全的队列 MpscArrayQueue 一个字快 至于快的原因可以去查看相关的文章 内存的伪共享先关的内容 import static java lang Thread sleep import io netty
  • nutz ajax ie8,Nutz.Json 在Mvc中的用法

    Mvc中使用Json 第一种 输出用 Ok json locked password salt 第二种 输入用的 AdaptBy type JsonAdaptor class Ok中的json 首先 必须再再再强调一次 如果返回值是Stri
  • 网络协议之以太网协议解析

    Ethernet 以太网协议 用于实现链路层的数据传输和地址封装 MAC 以太网是局域网使用最广泛的协议 由于部署简单 价格低廉 被IEEE委员会标准化 封装原理 以太网的数据帧格式如下图所示 它由6个字节的目的MAC地址 6个字节的源MA
  • Java八大基本数据类型

    Java中主要有八种基本数据类型 1 整型 byte short int long 2 字符型 char 3 浮点型 float double 4 布尔型 boolean 一 整型 Java中整型数据属于有符号数 即第一个bit位为0表示正
  • 2023 前端一场面试及答案整理

    金三马上就要开始了 俗话说得好 知己知彼百战百胜 多准备总是没有错的 以面试的形式和大家一起学习 一起回顾我们的职场生涯 今天简单总结一下我个人去面试 包括我在面试别人时的经验 加油加加油 目录 开头热场问题 1 说一下工作中解决过比较困难
  • 解决TortoiseGit每次Pull或者Push都需要输用户名密码的问题

    解决TortoiseGit每次Pull或者Push都需要输用户名密码的问题 每次提交代码到仓库都要输入用户名和密码 王同学差点哭了 忍住 忍住 不能哭 不能哭 解决方法如下 Right click TortoiseGit Settings
  • Linux 进程间通信之管道

    进程之间的通讯之管道 目录 1 无名管道 2 有名管道 3 管道读写规则 1 无名管道 管道是一种最基本的IPC机制 作用于父子进程之间 完成数据传递 管道有以下特性 1 其本质是一个伪文件 实为内核缓冲区 其本质是一个伪文件 实为内核缓冲
  • Vue 快速删除

    Vue 快速删除nodejs配置的快速删除node modules 删除文件夹及文件 cnpm i rimraf g 这个需要cmd管理员命令运行 删除文件及文件夹 rimraf f node modules

随机推荐

  • 微信小程序Markdonw、HTML富文本内容显示解决办法

    Towxml Towxml 是一个可将HTML markdown转换为WXML WeiXin Markup Language 的渲染库 由于微信小程序不能直接渲染HTML 因此富文本编辑器生成的HTML内容无法直接在小程序中展示 可能是出于
  • HTML网页入门之注释怎么写

    HTML网页入门之注释怎么写 为了增强网页的可读性注释是必不可少的 下面我们就来谈一谈 HTML网页的注释应该怎么写 HTML注释的作用 1 用注释的内容不会显示在浏览器中 注释标签用于在源代码中插入注释 注释的内容不会显示在浏览器中 对关
  • GoogLeNet网络详解与模型搭建

    文章目录 1 模型介绍 2 GoogLeNet详解 Inception模块 辅助分类器 3 GoogLeNet网络结构 4 Pytorch模型搭建代码 1 模型介绍 GoogLeNet是2014年Christian Szegedy等人在20
  • qmake source code 解读

    qmake 主要框架流程 qmake的主要功能执行入口在main cpp中的runQMake int argc char argv 中 其主要框架流程如下 runQMake int argc char argv QMakeVfs vfs 初
  • 2023Python该怎么学?我用这14张学习路线图,直观的告诉你

    我知道对于绝大多数的人来说 学习编程的第一目的其实就是想找一份有发展前景 并且薪资待遇还不错的工作 那么肯定是哪个编程语言的就业前景好 就越值得学习 Python作为当下最热的一门编程语言 刚好就符合这个条件 所以对于绝大部分人来说Pyth
  • java基于寄存器_基于栈的指令集与基于寄存器的指令集的区别,JVM指令集实例...

    现代JVM在执行Java代码的时候 通常都会将解释执行与编译执行两者结合起来 所谓解释执行 就是通过解释器来读取字节码 遇到相应的指令就去执行该指令 所谓编译执行 就是通过即时编译器 Just In Time JIT 将字节码转为本地机器码
  • 玩转ChatGPT:Custom instructions (vol. 1)

    一 写在前面 据说GPT 4又被削了 前几天让TA改代码 来来回回好几次才成功 可以看到之前3小时25条的限制 现在改成了3小时50条 可不可以理解为 以前一个指令能完成的任务 现在得两条指令 可能作为补偿 OpenAI对于Plus用户开放
  • 兼容和适配的区别

    兼容测试是app能否在不同品牌的手机上进行安装卸载等测试 适配测试是app能否在不同尺寸 不同分辨率的终端上能否正常显示的测试 转载于 https www cnblogs com bubutianshu p 11263395 html
  • 如何高逼格的写java代码

    记录一些了解的高逼格 好用的java代码 欢迎大家补充 共同学习 1 函数式接口 FunctionalInterface 好处 高逼格 代码收拢 解藕 统一处理 适用范围 具有共性的接口调用代码 举个栗子 在我们平时的微服务开发中 调用其他
  • vue计时器代码和倒计时代码

    计时器
  • Spring MVC拦截器和跨域请求

    一 拦截器简介 SpringMVC的拦截器 Interceptor 也是AOP思想的一种实现方式 它与Servlet的过滤器 Filter 功能类似 主要用于拦截用户的请求并做相应的处理 通常应用在权限验证 记录请求信息的日志 判断用户是否
  • easyui 获取并设置当前时间

    得到当前日期 formatterDate function date type var day date getDate gt 9 date getDate 0 date getDate var month date getMonth 1
  • Java基础复习之类与对象、封装、构造方法、String类

    个人觉得重点的部分会用彩色标出 面向对象思想 1 面向对象思想概述 面向过程思想 遇到一个问题 一步一步的去解决他 强调的是过程 典型代表语言是C语言 面向对象思想 遇到一个问题 找一个可以解决问题的对象 可以是人 也可以是别的 强调是对象
  • Windows7下IPV6设置方法详解

    Windows 7下配置IPV6的方法和Vista基本类似 需要注意的是 鉴于各个校园或其他场所的网络配置环境不同 如果按如下方法配置不成功可以进一步咨询相关网络管理人员 或重新选择连网客户端 下面来看具体的两个设置方法吧 步骤 方法 方法
  • %c与%s的区别与划分

    字符和字符串 c格式对应的是单个字符 s格式对应的是字符串 include
  • Elasticsearch Split和shrink API

    背景 尝试解决如下问题 单分片存在过多文档 超过lucene限制 分析 1 一般为日志数据或者OLAP数据 直接删除索引重建 2 尝试保留索引 生成新索引 数据写入新索引 查询时候包含 old index new index 3 尝试spl
  • 2023年第十四届蓝桥杯大赛python组省赛真题(已更新完)

    本篇更新蓝桥杯省赛真题的后5道 6 试题 F 公因数匹配 时间限制 10 0s 内存限制 512 0MB 本题总分 15 分 问题描述 给定 n 个正整数 Ai 请找出两个数 i j 使得 i lt j 且 Ai 和 Aj 存在大于 1 的
  • 线程(Linux系统实现)

    目录 1 线程概述 2 主线程和子线程 3 创建线程 线程函数 创建线程示例 4 线程退出 线程退出的原理主要包括以下两个方面 5 线程回收 回收子线程数据 6 线程分离 7 线程取消 8 线程 ID 比较 1 线程概述 线程是轻量级的进程
  • SIFT特征简介

    过程 1 尺度空间建立及极值点搜索 初步搜索 2 关键点精确定位 直线拟合使得关键点精确定位 x y sigma 消除边缘响应 初步搜寻特征点后 得到特征点的层数 像素坐标 x y 方向 文中分为18或36个离散方向 1 SIFT算法具的特
  • python dict遍历性能,Python:遍历list vs over dict items效率

    这取决于您使用的是哪个版本的Python 在Python 2中 some dict items 创建一个新的列表 这将占用一些额外的时间并占用更多的内存 另一方面 一旦创建了列表 它就是一个列表 因此在完成列表创建的开销之后 应该具有相同的