是否有一个优雅的替代方法来过滤这些结果而不使用大量的if语句?

Man*_*eep 2 python filtering

我在python中执行一些生成1000个结果的模拟.每个结果都有多个属性,如风险,成本等

我现在想要确定符合某些标准的结果,例如:

Factor 1, cost should be between 10 and 20
Factor 2, risk should be between 0 and 5
Factor 3...
Factor 4...
....
Run Code Online (Sandbox Code Playgroud)

目前我正在使用一系列嵌套的if语句来执行此操作.随着更多因素的增加,嵌套变得混乱.根据某些标准,是否有一种优雅的过滤方式?

Rom*_*huk 6

有很多解决方案取决于您的数据和首选代码样式.例如:

>>> conditions = (lambda x: 10 < x.cost < 20, lambda x: 0 < x.risk < 10)
>>> filter(lambda x: all(cond(x) for cond in conditions), result)
Run Code Online (Sandbox Code Playgroud)

要不就:

>>> conditions = lambda x: 10 < x.cost < 20 and 0 < x.risk < 10
>>> filter(conditions, result)
Run Code Online (Sandbox Code Playgroud)

要么:

>>> [r for r in result if 10 < r.cost < 20 and 0 < r.risk < 10]
Run Code Online (Sandbox Code Playgroud)