问题标签 [generator-expression]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
3120 浏览

python - 在 Python 中创建没有变量“x in”(例如范围)的生成器表达式或列表推导

在 Python 中,有没有办法在没有“x in”变量的情况下编写这个列表理解(因为它完全未使用)?同样适用于生成器表达式。我怀疑这种情况经常出现,但我偶然发现了几次并且很想知道。

这是一个例子:

(也许,有没有更优雅的方式来构建它?)

0 投票
4 回答
1883 浏览

python - 需要了解 Python 生成器对象

在下面的:

我知道 any(...) 里面是一个生成器对象。我不明白的是缺少括号 - 如果括号属于 any() 函数,那么生成器表达式周围不应该有另一组括号吗?

谢谢。

0 投票
3 回答
6765 浏览

python - 列表理解与生成器表达式的奇怪 timeit 结果?

我在回答这个问题,我更喜欢这里的生成器表达式并使用了这个,我认为这会更快,因为生成器不需要先创建整个列表:

Levon 在他的解决方案中使用了列表理解,

但是当我做这些 LC 的 timeit 结果比生成器快时:

然后我增加了列表的大小,并再次计时:

这次搜索'd'生成器比 LC 快,但是当我搜索中间元素(11)和最后一个元素时,LC 再次击败生成器表达式,我不明白为什么?

0 投票
3 回答
250 浏览

python - *parameters 调用是懒惰的吗?

可能重复:
python 的可变长度参数(*args)是否在函数调用时扩展生成器?

假设您有这样的功能:

你这样称呼它:

元素会被延迟调用,还是生成器会在函数执行之前遍历所有可能的数百万个元素?

0 投票
4 回答
11259 浏览

python - Python 生成器表达式 if-else

我正在使用 Python 解析一个大文件。我想做的是

我想为此使用生成器表达式 - 以节省内存。我正在输入实际代码。

0 投票
2 回答
3030 浏览

python - 为什么这个列表理解比等效的生成器表达式更快?

我在 Windows 上使用 Python 3.3.1 64 位和这个代码片段:

与此相比,执行时间为 136 毫秒:

执行时间为 146 毫秒。在这种情况下,生成器表达式不应该更快或与列表理解的速度相同吗?

我引用 Guido van Rossum从 List Comprehensions 到 Generator Expressions

...Python 3 中的列表推导和生成器表达式实际上都比 Python 2 中的要快!(并且两者之间不再存在速度差异。)

编辑:

我用 测量了时间timeit。我知道这不是很准确,但我只关心这里的相对速度,当我用不同的迭代次数进行测试时,我的列表理解版本的时间一直在缩短。

0 投票
1 回答
2397 浏览

python - 短路列表推导

在某些情况下,我想要 python 语法用于短路列表理解或生成器表达式。

这是一个简单的列表推导,以及 python 中的等效 for 循环:

该语言不支持短路的理解。建议的语法,以及 python 中的等效 for 循环:

它应该适用于任意迭代,包括无限序列,并且可以扩展到生成器表达式语法。我知道list(itertools.takewhile(lambda x: x != 'potato'), my_list)作为一种选择,但是:

  • 它不是特别pythonic - 不像while理解那样可读
  • 它可能不如 CPython 理解那么高效或快速
  • 它需要一个额外的步骤来转换输出,而这可以直接放入理解中,例如[x.lower() for x in mylist]
  • 原作者都不太喜欢

我的问题是,对于为什么将语法扩展到这个用例不是一个好主意,是否存在任何理论上的问题,或者它只是不可能,因为 python 开发人员认为它很少有用?这似乎是对语言的简单补充,也是一个有用的功能,但我可能忽略了一些隐藏的微妙之处或复杂性。

相关: 这个这个

0 投票
1 回答
60 浏览

python - 生成器表达式调用返回列表的函数

我有一个返回列表的函数,我想在使用紧凑的生成器表达式(或任何漂亮而紧凑的东西)在列表上调用时合并该函数的输出

假设我有一个 def foo(bar):where bar 是整数,它在一些疯狂的复杂计算之后返回一个列表。

arr=[9,1,5,1,7,1]在一行代码之后,我怎样才能获得希望?

arr=[foo(x) for x in arr]给了我[[9,1,5],[1],[7,1]]
而且我不想再写一行来推出列表中的列表。

0 投票
2 回答
947 浏览

python - 无需在 python 中复制代码即可将生成器更改为列表理解的简单方法?

我有这样的事情:

生成器用于避免将整个文件读入内存,但有时读取整个文件正是我们所希望的(即列表理解)。如何在没有太多额外代码的情况下改变这种行为?目标是能够在这两种模式之间进行选择。我听说python有一些叫做descriptor的特性,可以用来修改函数而不接触函数体,在这种情况下是否合适?如果是,这里应该如何使用?

0 投票
6 回答
554 浏览

python - 如何识别生成器与列表理解

我有这个:

我的问题是,在这种情况下,我是否将列表理解或生成器对象传递给 sum ?我该怎么说?对此有一般规则吗?

还要记住sum 本身需要一对括号来包围它的参数。我认为上面的括号是用于求和而不是用于创建生成器对象。你不同意吗?