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

时间:2012-01-25 11:35:42

标签: 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...
....

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

1 个答案:

答案 0 :(得分:6)

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

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

或者只是:

>>> conditions = lambda x: 10 < x.cost < 20 and 0 < x.risk < 10
>>> filter(conditions, result)

或者:

>>> [r for r in result if 10 < r.cost < 20 and 0 < r.risk < 10]