问题标签 [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 投票
3 回答
119 浏览

python - 如何使用reduce/map/list理解进行求和?

在此处输入图像描述 我上面有一个等式,我想计算红色下划线的总和,[ρ0,ρ1,ρ2,...,ρN] 是一个开始的列表。

for 循环肯定可以解决问题。但我想知道是否有更简洁的pythonic风格。我尝试了 reduce 函数,但它似乎只适用于列表的直接求和或乘法。像上面显示的那样进行求和的方法是什么?

0 投票
1 回答
54 浏览

python - 有人可以解释 python 生成器表达式中空字典的行为吗?

当我们偶然发现以下行为时,我和一些朋友正在讨论与 Python 中的内存管理相关的事情:

令人惊讶的是,我们似乎没有明确定义的行为:dict 每次都不是新的,也不是每次都相同的引用。

最重要的是,我们得到了这种奇怪的行为(没有代码在这两个片段之间的解释器中运行)。

谁能解释这种行为?使用列表推导 ( l = [{} for _ in range(6)]) 显示每个 dict 的不同地址。

0 投票
4 回答
3803 浏览

python - Python 3 中的“列表(生成器表达式)”是列表推导语法糖吗?

在 Python 3 中,列表推导式只是将生成器表达式输入list函数的语法糖吗?

例如是以下代码:

居然在后台转换成下面的?

我知道输出是相同的,并且 Python 3 修复了列表推导所具有的周围命名空间的令人惊讶的副作用,但是就 CPython 解释器在幕后所做的而言,前者是转换为后者,还是有任何区别代码是如何被执行的?

背景

我在这个问题的评论部分发现了这个等价的声明,并且快速的谷歌搜索显示了同样声明。

What's New in Python 3.0 文档中也提到了这一点,但措辞有些含糊:

另请注意,列表推导具有不同的语义:它们更接近于 list() 构造函数内的生成器表达式的语法糖,特别是循环控制变量不再泄漏到周围的范围内。

0 投票
2 回答
476 浏览

python - 未使用迭代变量的更紧凑的列表理解

我有几个采样函数需要调用一定次数,如下面的说明:

我想知道,是否有更紧凑的方式来表达该陈述,尤其是通过避免_unused变量?

0 投票
6 回答
4670 浏览

python - 列表(生成器)的意外输出

我有一个列表和一个lambda定义为的函数

然后我尝试了两种不同的方法来计算一个简单的总和

第一种方法。

第二种方法。

两种结果都出乎意料地不同。为什么会这样?

0 投票
2 回答
103 浏览

python - 生成器表达式的格式不正确?Python

我正在尝试将几个ifelse语句更改为生成器表达式,并且由于某种原因它给了我一个错误。

所以我的ifelse声明是这样的..

我已经在这个生成器表达式中尝试了上面的 if 和 else 语句..

它给了我这样的错误:

0 投票
1 回答
109 浏览

python - 为什么这些生成器表达式的行为不同?

这两个代码片段仅在构造列表的方式上有所不同。一用[],二用list()

这个消耗迭代然后引发StopIteration

这个消耗可迭代并永远循环打印空列表。

这种行为的规则是什么?

0 投票
1 回答
16454 浏览

python - 列表推导和生成器表达式中的 yield

以下行为对我来说似乎相当违反直觉(Python 3.4):

最后一行的中间值实际上并不总是None,它们是我们send进入生成器的任何内容,相当于(我猜)以下生成器:

这三行完全有效,这让我觉得很有趣。参考资料说只允许在函数定义中使用yield(尽管我可能读错了和/或它可能只是从旧版本中复制而来)。前两行在 Python 2.7 中产生 a SyntaxError,但第三行没有。

还有,好像很奇怪

  • 列表推导返回的是生成器而不是列表
  • 并且生成器表达式转换为列表和相应的列表推导包含不同的值。

有人可以提供更多信息吗?

0 投票
5 回答
470 浏览

python - 生成器表达式包括条件测试而不调用函数两次?

假设我有一个执行一些繁重计算的函数。

然后我有一个列表,其中包含我想传递给的值f()

我想x在这个列表中找到第一个验证条件的元素f(x)(比如说f(x) != 0),并得到这个计算结果。

基本上,我会写一个for这样的循环:

我想知道是否有办法使用生成器表达式获得相同的结果?

到目前为止,我认为是这样的:

问题是这调用f()了两次。

0 投票
1 回答
438 浏览

python - 为什么这个生成器表达式函数比循环版本慢?

我一直在根据生成器表达式往往比正常循环更有效的理论进行操作。但后来我遇到了下面的例子:编写一个函数,给定一个数字N和一些因子 ,ps返回所有数字的总和,这些数字N是至少一个因子的倍数。

这是一个循环版本和一个较短的生成器表达式版本:

我希望两者的表现大致相同,理解版本可能会快一点,但我没想到的是:

慢 4 倍甚至不接近!为什么?我有什么误解?