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

python - 有条件的列表理解

我有一个简单的清单。

我想使用列表理解从中创建一个新列表。

很简单,但是如果我只想对非零元素进行操作怎么办?

'if' 在列表推导中需要 'else',所以我想出了这个。

但理想的结果是。

我可以这样做

或使用“过滤器”和 lambda

如何使用列表推导获得此结果?

0 投票
1 回答
46 浏览

python - 可以修改此生成器表达式以匹配循环结果吗?

考虑这个 for 循环:

平面列表y不是通过类似方式获得的

可以修改生成器表达式以返回平面列表吗?

0 投票
1 回答
34 浏览

python - 生成器理解,它添加不​​同数量的相同项目

鉴于:

生成器理解给出以下元组:

其中项目multi出现两次TrueFalse,而其他出现None.

0 投票
1 回答
48 浏览

python - 过滤器或生成器的意外结果

这里有一个有趣的。当我使用或生成器发现一些意外结果时,我实际上是在为另一个问题写答案。filter我有一个文件路径列表:

我在路径列表中创建了一组不同的目录:

现在我想制作一个生成器列表(甚至是生成器的生成器),每个生成器都包含paths同一目录中的元素。所以我这样做:

跑完后我是不是很惊讶:

并获得以下内容:

这显然是错误的。然而,如果我使用以下句子:

打印循环显示预期的答案:

如果我使用filter和/或map代替生成器:

我也得到了错误的答案 编辑: /map版本filter确实有效。

这里发生了什么?

0 投票
1 回答
632 浏览

python - 为什么生成器表达式中的 `yield from` 会产生 `None`s?

我有以下代码:

输出是:

...等为什么会None出现s?如果我有:

然后我得到了我所期望的:

...等等。此外,有没有办法将其编写为生成器表达式以获得与后者相同的结果?

0 投票
1 回答
719 浏览

python - Python 上下文管理器可以与生成器一起使用吗?

我正在尝试使用控制访问子目录的上下文管理器,将它与生成器表达式结合起来似乎非常优雅,但它似乎不起作用。有什么办法可以纠正这个问题,以便我可以将两者一起使用?

这是示例:

0 投票
3 回答
95 浏览

python - 使用多个(相似的)生成器表达式

在 csv 文件中,我试图用其他字符替换某些字符。

我当前的代码与此类似:

在这个例子中,我只使用了三个生成器表达式,但很容易不止这些。

有谁知道这样做的正确方法?我担心这种结构可能不是最快的(当然看起来也不是最优的)。

0 投票
1 回答
1586 浏览

python - python生成器表达式的顺序

我有一个示例,其中 python 生成器表达式的迭代顺序似乎与类似的列表理解和生成器函数不同。

例如,代码

有输出

我希望生成器表达式产生一个有序的输出,就像它对列表理解所做的那样。生成器表达式是否有某些内容表明无法保证顺序?

为什么生成器表达式的顺序与其他表达式不同,即使构造几乎相同?它甚至与遍历字典的顺序不同,所以它似乎并没有推迟。

我在 Python 2 和 3 中看到了相同的行为。

0 投票
2 回答
1059 浏览

python - next() 在 python 中的任何/全部都不能很好地发挥作用

我今天遇到了一个错误,该错误是因为我next()用来提取一个值,而“未找到”会发出一个StopIteration.

通常这会停止程序,但函数 using在迭代next内被调用all(),所以all刚刚提前终止并返回True

这是预期的行为吗?有没有风格指南可以帮助避免这种事情?

简化示例:

0 投票
2 回答
94 浏览

python - 与列表推导相比,生成器表达式的工作量是否更少?

在重构一段代码时,我注意到了这一点:

反过来,load_products()执行 SQL 查询,并且对于每个产品:

  • 执行一些相对 CPU 开销较大的操作,并且:
  • 用于yield将产品一一返回给调用者。

据我了解,列表推导和生成器表达式之间的区别在于,在列表推导的情况下,所有产品都将从数据库加载并进行处理,即使第一个产品是匹配的。

因此,如果我用这样的生成器表达式替换它:

它可以通过最终减少代码的工作来改进代码,即一旦找到匹配项,就不会从数据库加载下一个产品,也不会进行处理。

不过,可以肯定的是,我不太了解 Python。

我对吗?Python 会在找到匹配项后立即停止,还是两段代码都执行相同的操作并从数据库中加载每个产品?