python - 过滤生成器表达式输出的pythonic/惯用方法是什么?

标签 python python-3.x

假设我们有一个生成器表达式,也许是一个简单的表达式,但不一定如此:

(function(x) for x in values)
过滤此生成器表达式生成的值的首选方法是什么? IE。我们不想过滤 x 的值,但在 function(x) 的值上?
当然
# this only filters on the inputs to the function, not on its results
(function(x) for x in values if _some_condition_expr_) 
我认为以下内容是最pythonic的(顺便说一句,也摆脱了生成器表达式本身):
_ = lambda x: x  # simple filter for truthy values

filter(_, map(function, values))           # <<< is this the best we can do?
# or
filter(_, (generator_expression_contents_here))
- 与这种憎恶相反:
(y for y in (function(x) for x in values) if y)
我在生成器表达式中是否缺少一些允许过滤结果而不嵌套表达式等的东西?换句话说,就是filter(map())接近我们能做的最好的事情?我不是要寻找深奥的东西,只是确保我没有遗漏一些更简洁或更 Pythonic 的方法。
AFAIK,Python 没有身份函数(上面的 _),也没有 is_true功能。

最佳答案

关于这是否更好,这是一个有争议的问题,但是 :=可以在这里使用:

filtered = (res for val in values if (res := function(val)))
函数的结果赋值给 res ,该结果用作谓词,然后 res可在左侧使用。

关于python - 过滤生成器表达式输出的pythonic/惯用方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67595447/

相关文章:

python - 列出类继承的所有属性

python - 序列化器 DRF 中数据的非模型字段

python - 反向功能无法正常工作

python - Sklearn特征选择

python - 如何使用python捕获网络流量

张量数组与 tf.add_n 的 python 总和

python - 我可以自动将照片上传到 Instagram 吗?

python - 如何在 Python Seaborn 包中更改图形的大小

python - 如何摆脱最大递归深度错误或更好地解决这个问题?

python - 如何查找给定数据框的多列之间的差异并将结果保存为单独的数据框