【问题标题】:Most Pythonic way to fit a variable to a range? [duplicate]将变量拟合到范围的大多数 Pythonic 方法? [复制]
【发布时间】:2014-03-21 17:31:08
【问题描述】:

有没有更 Pythonic 的方式来实现这一点:

result = #...real value from elsewhere
max_value = 1
min_value = 0
if result > max_value:
    result = max_value
elif result < min_value:
    result = min_value
return result

不知道如何用文字来解释,所以我希望它很清楚。谢谢

【问题讨论】:

    标签: python


    【解决方案1】:

    您可以使用minmax 函数:

    result = min(max_value, max(min_value, result))
    

    【讨论】:

    • 正如duplicate 中的答案之一指出的那样,如果您将其包装在它自己的函数中,这将更容易阅读,例如clamp(value, min_, max_)
    【解决方案2】:

    这是我喜欢的一个选项:

    result = max_value if result > max_value else result
    result = min_value if result < min_value else result
    

    【讨论】:

      【解决方案3】:

      您只需要sorted 方法

      result = sorted((min_value,result, max_value))[1]
      

      【讨论】:

        【解决方案4】:

        你真的需要这部分吗?

        elif result < min_value:
            result = min_value
        

        这样也行吗

        result = #...real value from elsewhere
        max_value = 1
        min_value = 0
        if result >= max_value:
            result = max_value
        else:
            result = min_value
        return result
        

        【讨论】:

        • 不是因为你忘了检查中间的大小写!有最小值、实际值、最大值三个选项。你所拥有的只是最小,最大
        • 抱歉,我认为将 >= 放入将编辑
        • 对于result,这仍然只有两种可能。您有一个if 和一个常规的else,这意味着将始终选择两条路径之一。 IE) result = max_valueresult = min_value 将始终被调用 ^ ^
        • 通过OP写elif实际上有三个路径,result = max_valueresult = min_value或结果保持不变
        猜你喜欢
        • 2017-11-17
        • 1970-01-01
        • 1970-01-01
        • 2019-04-17
        • 2022-09-23
        • 2020-08-04
        • 1970-01-01
        • 2013-11-29
        • 1970-01-01
        相关资源
        最近更新 更多