Python列表理解-想要避免重复评估

2023-11-26

我有一个列表理解,近似于:

[f(x) for x in l if f(x)]

其中 l 是一个列表,f(x) 是一个返回列表的昂贵函数。

我想避免对 f(x) 的每次非空出现对 f(x) 求值两次。有什么方法可以将其输出保存在列表理解中吗?

我可以删除最终条件,生成整个列表,然后修剪它,但这似乎很浪费。

Edit:

建议采用两种基本方法:

内部生成器理解:

[y for y in (f(x) for x in l) if y]

或记忆。

我认为内部生成器理解对于所述问题来说是优雅的。事实上,我简化了问题以使其清楚,我真的想要:

[g(x, f(x)) for x in l if f(x)]

对于这种更复杂的情况,我认为记忆会产生更清晰的最终结果。


[y for y in (f(x) for x in l) if y]

Will do.

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

Python列表理解-想要避免重复评估 的相关文章

随机推荐

  • 用于监听 YouTube HTML5 播放器中 URL 更改的 JavaScript

    我正在编写一个 Chrome 扩展程序 因此我需要能够侦听 YouTube URL 中的更改 即查看您是否切换了视频 YouTube 使这变得困难 因为其 HTML5 视频播放器没有整个页面重新加载 没有 URL 片段更改 无法侦听 has
  • 训练期间损失没有减少(Word2Vec、Gensim)

    哪些情况会造成损失model get latest training loss 每个时期都会增加 用于训练的代码 class EpochSaver CallbackAny2Vec Callback to save model after e
  • Python函数在二进制数组中查找1的索引

    我有一个看起来像这样的数组 1 0 1 0 0 1 我想得到那些有 1 的索引 所以在这里我会得到一个数组 0 2 5 然后基于它我会创建一个新的数组 它接受这些数字并用它们对 2 求幂 所以最后的数组是 2 0 2 2 2 5 有没有办法
  • 如何在 Python 中创建守护进程?

    在谷歌上搜索揭示 x2 代码片段 第一个结果是这段代码的配方其中有很多文档和解释 以及下面的一些有用的讨论 然而 另一个代码示例虽然不包含太多文档 但包含用于传递启动 停止和重新启动等命令的示例代码 它还创建一个 PID 文件 可以方便地检
  • 使用 php 设置 firebase v3 自定义身份验证

    我正在尝试按照以下指南使用 google 的新 firebase sdk 设置自定义身份验证 https firebase google com docs auth server use a jwt library在 samble 代码中它
  • i18n 错误:控制器和模板使用不同的隐式语言

    控制器 def test Action implicit request gt import play api i18n val msg Messages error invalid implicit val langInControlle
  • 是否可以在运行时动态加载 Svelte 模板?

    我查看了文档
  • 构建后给 app.config 另一个名称吗?

    众所周知 当您使用 app config 文件构建项目时 它会被复制到 bin 目录并重命名为 targetFileName config 是否可以将其称为其他名称 例如 如果我的可执行文件名为 myApplication exe 我可以使
  • 如何为 RecyclerView 创建上下文菜单

    如何实现上下文菜单RecyclerView 显然是在打电话registerForContextMenu recyclerView 不起作用 我从一个片段中调用它 有人成功实施过这个吗 感谢您的信息和评论 我能够实现ContextMenu对于
  • 编写 PHP 文件以从 CSV 读取并执行 SQL 查询

    我想要一个 PHP 脚本来读取以下格式的 CSV 文件中的内容 id sku 1 104101 2 105213 总共有 1486 个条目 我认为最好使用 for 循环而不是 while EOF 之后 我想对名为m118的数据库 表cata
  • 数据访问层的设计模式

    你可能会觉得这是家庭作业 为此我很抱歉 我已经搜索过但找不到正确的答案 所以我的问题是 我有几个类 每个类都有一个保存方法 所以我创建了一个单独的类来处理数据库 namespace HospitalMgt Data public stati
  • 如何使用 Hibernate 仅更新所有实体属性的一部分

    我收到一个包含 30 个字段的 JSON 我的实体是根据该 JSON 构建的 问题是 不应更新两个字段 两个日期 如果我使用entity merge 两个字段都会更新 如何避免这两个字段被更新 也许使用 criteria Example 有
  • 为什么short是2字节对齐的?

    这是 C 结构体的声明 struct align char c 1 byte short s 2 bytes 在我的环境中 sizeof structalign 为 4 填充 1 字节位于 char c 和 short s 之间 有人说这是
  • 在 F# 中编写符合 CLS 的代码

    我对 F 非常陌生 我开始在 OpenGL 之上编写我的函数包装器 我还打算用它来编写一个图形引擎 该引擎应该与所有 Net 语言具有互操作性 但很难找到有关 F 中哪些代码结构不符合 CLS 的信息 例如 我已经知道一些不符合 CLS 的
  • Spring Security、REST基本身份验证问题

    在使用 Spring 进行基本身份验证时 我遇到了与 HTTP 响应标头 Access Control Allow Origin 相关的问题 当我手动进行身份验证时 如下面的代码 我使用的是 REST RequestMapping valu
  • matplotlib 标准颜色图用法

    我正在使用 matplotlib 1 3 0 并且有以下内容 import matplotlib pyplot as plt cmap plt cm jet plt contourf 12 2 8 2 levels 0 1 3 5 1 3
  • 如何在 Service 构造函数中对 Controller 进行单元测试并模拟 @InjectModel

    我在对控制器进行单元测试时遇到问题 并收到错误 Nest 无法解析我的服务的依赖项 为了获得最大的覆盖范围 我想对控制器和相应的服务进行单元测试 并想模拟猫鼬连接等外部依赖项 同样 我已经尝试了以下链接中提到的建议 但没有找到任何运气 ht
  • Android Studio 更新后构建项目中的classes.jar 中存在重复类

    我最近将 Android Studio 更新到最新版本 因为我一直面临连接到它的库的问题 最新面临的问题如下 Cause 1 java util concurrent ExecutionException java lang Runtime
  • nginx conf /具有多个映射)到同一变量

    我们有一个多站点设置 需要将域和域 子文件夹映射到变量 这样编程就知道要加载哪个版本 我们的商店具有单独的域 并且可以通过以下方式捕获 http host还有domain com string locale here 并被捕获 http h
  • Python列表理解-想要避免重复评估

    我有一个列表理解 近似于 f x for x in l if f x 其中 l 是一个列表 f x 是一个返回列表的昂贵函数 我想避免对 f x 的每次非空出现对 f x 求值两次 有什么方法可以将其输出保存在列表理解中吗 我可以删除最终条