问题标签 [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.
python - 如何使用reduce/map/list理解进行求和?
我上面有一个等式,我想计算红色下划线的总和,[ρ0,ρ1,ρ2,...,ρN] 是一个开始的列表。
for 循环肯定可以解决问题。但我想知道是否有更简洁的pythonic风格。我尝试了 reduce 函数,但它似乎只适用于列表的直接求和或乘法。像上面显示的那样进行求和的方法是什么?
python - 有人可以解释 python 生成器表达式中空字典的行为吗?
当我们偶然发现以下行为时,我和一些朋友正在讨论与 Python 中的内存管理相关的事情:
令人惊讶的是,我们似乎没有明确定义的行为:dict 每次都不是新的,也不是每次都相同的引用。
最重要的是,我们得到了这种奇怪的行为(没有代码在这两个片段之间的解释器中运行)。
谁能解释这种行为?使用列表推导 ( l = [{} for _ in range(6)]
) 显示每个 dict 的不同地址。
python - Python 3 中的“列表(生成器表达式)”是列表推导语法糖吗?
在 Python 3 中,列表推导式只是将生成器表达式输入list
函数的语法糖吗?
例如是以下代码:
居然在后台转换成下面的?
我知道输出是相同的,并且 Python 3 修复了列表推导所具有的周围命名空间的令人惊讶的副作用,但是就 CPython 解释器在幕后所做的而言,前者是转换为后者,还是有任何区别代码是如何被执行的?
背景
我在这个问题的评论部分发现了这个等价的声明,并且快速的谷歌搜索显示了同样的声明。
在What's New in Python 3.0 文档中也提到了这一点,但措辞有些含糊:
另请注意,列表推导具有不同的语义:它们更接近于 list() 构造函数内的生成器表达式的语法糖,特别是循环控制变量不再泄漏到周围的范围内。
python - 未使用迭代变量的更紧凑的列表理解
我有几个采样函数需要调用一定次数,如下面的说明:
我想知道,是否有更紧凑的方式来表达该陈述,尤其是通过避免_unused
变量?
python - 列表(生成器)的意外输出
我有一个列表和一个lambda
定义为的函数
然后我尝试了两种不同的方法来计算一个简单的总和
第一种方法。
第二种方法。
两种结果都出乎意料地不同。为什么会这样?
python - 生成器表达式的格式不正确?Python
我正在尝试将几个if
和else
语句更改为生成器表达式,并且由于某种原因它给了我一个错误。
所以我的if
和else
声明是这样的..
我已经在这个生成器表达式中尝试了上面的 if 和 else 语句..
它给了我这样的错误:
python - 为什么这些生成器表达式的行为不同?
这两个代码片段仅在构造列表的方式上有所不同。一用[]
,二用list()
。
这个消耗迭代然后引发StopIteration
:
这个消耗可迭代并永远循环打印空列表。
这种行为的规则是什么?
python - 列表推导和生成器表达式中的 yield
以下行为对我来说似乎相当违反直觉(Python 3.4):
最后一行的中间值实际上并不总是None
,它们是我们send
进入生成器的任何内容,相当于(我猜)以下生成器:
这三行完全有效,这让我觉得很有趣。参考资料说只允许在函数定义中使用yield
(尽管我可能读错了和/或它可能只是从旧版本中复制而来)。前两行在 Python 2.7 中产生 a SyntaxError
,但第三行没有。
还有,好像很奇怪
- 列表推导返回的是生成器而不是列表
- 并且生成器表达式转换为列表和相应的列表推导包含不同的值。
有人可以提供更多信息吗?
python - 生成器表达式包括条件测试而不调用函数两次?
假设我有一个执行一些繁重计算的函数。
然后我有一个列表,其中包含我想传递给的值f()
:
我想x
在这个列表中找到第一个验证条件的元素f(x)
(比如说f(x) != 0
),并得到这个计算结果。
基本上,我会写一个for
这样的循环:
我想知道是否有办法使用生成器表达式获得相同的结果?
到目前为止,我认为是这样的:
问题是这调用f()
了两次。
python - 为什么这个生成器表达式函数比循环版本慢?
我一直在根据生成器表达式往往比正常循环更有效的理论进行操作。但后来我遇到了下面的例子:编写一个函数,给定一个数字N
和一些因子 ,ps
返回所有数字的总和,这些数字N
是至少一个因子的倍数。
这是一个循环版本和一个较短的生成器表达式版本:
我希望两者的表现大致相同,理解版本可能会快一点,但我没想到的是:
慢 4 倍甚至不接近!为什么?我有什么误解?