如何强制值在一个范围内?

时间:2015-06-25 11:07:31

标签: python range

最“pythonic”的方法是什么?

x = some_value
bounds = [lower_bound, upper_bound]

if x < bounds[0]:
    x = bounds[0]
if x > bounds[1]:
    x = bounds[1]

4 个答案:

答案 0 :(得分:4)

对我来说这看起来好多了

x = sorted([lower_bound, x, upper_bound])[1]

但是,如果您想考虑性能,那么if/elif是最佳实现。

答案 1 :(得分:2)

你可以这样做:

x = max(min(some_value, upper_bound), lower_bound)

这是pythonic,因为它是一个简洁的单行内容,它比创建列表并对其进行排序更有效。

答案 2 :(得分:0)

  

...有时会因为找到一个棘手的方法而感到茫然   在一条线上的东西。

编程时最重要的是你真正理解你想要解决的问题。然后你想编写可以阅读的代码。所以,pythonic并不意味着它是一个单行...

这不是丑陋或糟糕的Python:

if x < lb:
    x = lb
elif x > ub:
    x = ub

这就是我建议写出Naman Sogani建议的方式。

_, x, _ = sorted([lb, x, ub])

答案 3 :(得分:-1)

如果您不在乎该值是什么,只要它在一定范围内:

>>> import random
>>> random.choice(range(lower_bound, upper_bound))