避免 Python 中不必要的切片复制

2024-01-10

对于这样的情况,是否有一个常见的习惯用法可以避免无意义的切片复制:

>>> a = bytearray(b'hello')
>>> b = bytearray(b'goodbye, cruel world.')
>>> a.extend(b[14:20])
>>> a
bytearray(b'hello world')

在我看来,当b[14:20]切片已创建。而不是在内存中创建一个新的切片来提供给extend我想说“仅使用当前对象的这个范围”。

有些方法可以帮助您处理切片参数,例如count:

>>> a = bytearray(1000000)       # a million zero bytes
>>> a[0:900000].count(b'\x00')   # expensive temporary slice
900000
>>> a.count(b'\x00', 0, 900000)  # helpful start and end parameters
900000

但很多人,比如extend在我的第一个示例中,没有此功能。

我意识到对于许多应用程序来说,我所说的将是微观优化,所以在有人问之前 - 是的,我已经分析了我的应用程序,对于我的情况来说这是值得担心的。

我在下面有一个“解决方案”,但欢迎任何更好的想法。


创建一个bufferobject 避免复制切片,但对于短切片,仅进行复制会更有效:

>>> a.extend(buffer(b, 14, 6))
>>> a
bytearray(b'hello world')

这里只有一份内存副本,但创建内存的成本buffer对象不仅仅是消除了保存。不过,对于较大的切片来说应该更好。我不确定该切片必须有多大才能使该方法整体更有效。

请注意,对于 Python 3(以及可选的 Python 2.7),您需要一个memoryview对象代替:

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

避免 Python 中不必要的切片复制 的相关文章

  • Django 代理模型的继承和多态性

    我正在开发一个我没有启动的 Django 项目 我面临着一个问题遗产 我有一个大模型 在示例中简化 称为MyModel这应该代表不同种类的物品 的所有实例对象MyModel应该具有相同的字段 但方法的行为根据项目类型的不同而有很大差异 到目
  • Python(Selenium):如何通过登录重定向/组织登录登录网站

    我不是专业程序员 所以请原谅任何愚蠢的错误 我正在做一些研究 我正在尝试使用 Selenium 登录数据库来搜索大约 1000 个术语 我有两个问题 1 重定向到组织登录页面后如何使用 Selenium 登录 2 如何检索数据库 在我解决
  • 从字符串中删除识别的日期

    作为输入 我有几个包含不同格式日期的字符串 例如 彼得在16 45 我的生日是1990年7月8日 On 7 月 11 日星期六我会回家 I use dateutil parser parse识别字符串中的日期 在下一步中 我想从字符串中删除
  • 如何在 Python 中检索 for 循环中的剩余项目?

    我有一个简单的 for 循环迭代项目列表 在某些时候 我知道它会破裂 我该如何退回剩余的物品 for i in a b c d e f g try some func i except return remaining items if s
  • 如何使用 Ansible playbook 中的 service_facts 模块检查服务是否存在且未安装在服务器中?

    我用过service facts检查服务是否正在运行并启用 在某些服务器中 未安装特定的软件包 现在 我如何知道这个特定的软件包没有安装在该特定的服务器上service facts module 在 Ansible 剧本中 它显示以下错误
  • Spark KMeans 无法处理大数据吗?

    KMeans 有几个参数training http spark apache org docs latest api python pyspark mllib html highlight kmeans pyspark mllib clus
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • 在f字符串中转义字符[重复]

    这个问题在这里已经有答案了 我遇到了以下问题f string gt gt gt a hello how to print hello gt gt gt f a a gt gt gt f a File
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • 对年龄列进行分组/分类

    我有一个数据框说df有一个柱子 Ages gt gt gt df Age 0 22 1 38 2 26 3 35 4 35 5 1 6 54 我想对这个年龄段进行分组并创建一个像这样的新专栏 If age gt 0 age lt 2 the
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • 类型错误:预期单个张量时的张量列表 - 将 const 与 tf.random_normal 一起使用时

    我有以下 TensorFlow 代码 tf constant tf random normal time step batch size 1 1 我正进入 状态TypeError List of Tensors when single Te
  • 如何计算 pandas 数据帧上的连续有序值

    我试图从给定的数据帧中获取连续 0 值的最大计数 其中包含来自 pandas 数据帧的 id date value 列 如下所示 id date value 354 2019 03 01 0 354 2019 03 02 0 354 201
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P
  • 导入错误:没有名为 site 的模块 - mac

    我已经有这个问题几个月了 每次我想获取一个新的 python 包并使用它时 我都会在终端中收到此错误 ImportError No module named site 我不知道为什么会出现这个错误 实际上 我无法使用任何新软件包 因为每次我

随机推荐

  • 使用opencv检测棕色物体

    我想在图像中找到棕色对象 我已经完成了以下过程 将图像 BGR 转换为 HSV 我使用 opencv lib 的 inRange 函数来查找棕色 cv inRange src 标量 9 95 95 标量 17 255 255 dest 并找
  • Javascript脚本元素设置内部文本

    我们需要在 iframe 内添加一个 javascript 元素 它位于同一个 Web 域内 因此不存在安全问题 我们让它工作 但不知道如何在其标签之间填充脚本内容 你会怎么做 var iframe document getElementB
  • JavaScript 中的增强类型

    我正在读道格拉斯 克罗克福德的书JavaScript 好的部分 我对某事有点困惑 在第 4 章的 增强类型 下 他创建了用于添加方法的快捷方式 Function prototype method function name func thi
  • 如果不存在则插入到 Mongodb .Net 驱动程序中

    假设我有以下模型 public class Person BsonId public Guid Id get set public string Name get set public string Title get set public
  • 如何通过 Django 中的表单向整数字段添加值?

    我目前正在尝试制作一个表单 将值添加到我创建的 点 模型中 但它似乎没有通过 我制作了一个表单 允许用户输入任何整数值 并且它应该添加 或减去 到模型中 谁能指出我该做什么的正确方向 任何帮助表示赞赏 这是我的 forms py class
  • 在 WPF 中隐藏网格行

    我有一个简单的 WPF 表单 其中包含Grid在表格上声明 这Grid有一堆行
  • *ngFor中输入无法顺利打字Angular 2

    下面的链接是示例代码 https plnkr co edit xmWMm0yjFemdXQzZpJad p preview https plnkr co edit xmWMm0yjFemdXQzZpJad p preview 我有一个对象
  • Keras 检查时出错:预期 embedding_1_input 具有形状 (None, 100),但得到的数组具有形状 (1, 3)

    我使用 imdb 示例创建了 LSTM 模型 并尝试在我自己的字符串中预测情绪 max features 20000 cut texts after this number of words among top max features m
  • 如何阻止 PHP iMagick 根据 EXIF“方向”数据自动旋转图像

    目前正在使用 PHP 和 iMagick 开发海报打印 Web 应用程序 这是我用来测试应用程序的上传 图像编辑功能的示例图像 该图像包含以下 EXIF 数据 FileName gt 1290599108 IMG 6783 JPG File
  • RedirectToAction 位于区域之外

    我最近在工作中更新了我们的 MVC 2 项目以使用 Areas 但是我遇到了一些问题RedirectToAction method 我们的一些管制员等仍然位于我们的区域之外 这些控制器包括家庭控制器等 我该如何做RedirectToActi
  • Python 静态方法并不总是可调用的

    在解析属性时使用 dict https docs python org 3 library stdtypes html object dict my staticmethod https docs python org 3 library
  • 使用 rsync(或 svn、git、cvs)进行部署并忽略部署期间不一致的状态?

    我们目前正在讨论通过 rsync 部署网站 但是 在 rsync 过程中 应用程序处于不一致的状态 因为某些文件可能已经同步 而其他文件仍保留旧版本 对吗 人们如何处理这个问题 我猜想通过 svn git cvs 部署时也存在同样的问题 我
  • MongoDB 中的查询

    我正在尝试使用rmongodb从 MongoDB 数据库获取信息以便在 R 中进一步处理 但是 我在真正开始时遇到了一些困难 这个有效 cursor lt mongo find mongo people query list last na
  • iOS 上的 Xamarin Forms 如何设置页面的屏幕方向?

    所以标题说明了一切 我现在对 iOS 很关心 我试图起诉我的基本页面 LandscapeContentPage 的自定义渲染器 这希望强制它呈现为横向 我没有成功 我尝试使用我发现的一个 hack 在 ViewDidAppear 中你提供了
  • 回形针 - 每个样式的默认样式?可能的

    我正在使用回形针 并且有多种样式 styles gt large gt 300x300 gt medium gt 150x150 gt small gt 50x50 gt thumb gt 30x30 gt 问题是default stype
  • Linux下自动调整进程优先级

    我正在尝试编写一个程序 根据配置文件 基本上是路径 优先级对 自动设置进程优先级 我认为最好的解决方案是用一个内核模块来替换 execve 系统调用 太糟糕了 系统调用表在内核版本 gt 2 6 0 中没有导出 因此如果没有系统调用表 就不
  • Crashlytics 记录错误

    我正在使用 iOS 版 Crashlytics 记录错误 NSDictionary detail message errorWithURL response jsonString Crashlytics sharedInstance rec
  • 如何通过代理/防火墙添加网络引用?

    我目前在工作中处于防火墙后面 我正在测试已部署到 我的网站的某些内容 并且工作代理似乎在某种程度上阻止了它 基本上我收到的消息是 由于对象的当前状态 操作无效 我已将其归结为我的代理干扰 但我看不到任何高级设置或任何可以设置为通过我的代理访
  • Python:解析 JSON 时出现 Keyerror

    我刚刚编写了一个程序来解析 api 中的一些数据 API 以 JSON 格式返回数据 当我尝试解析它时 它给了我一个关键错误 Traceback most recent call last File test py line 20 in
  • 避免 Python 中不必要的切片复制

    对于这样的情况 是否有一个常见的习惯用法可以避免无意义的切片复制 gt gt gt a bytearray b hello gt gt gt b bytearray b goodbye cruel world gt gt gt a exte