更多pythonic替代方案,用于获取范围内的值而不使用min和max

时间:2015-04-24 22:01:47

标签: python

我有这个:

return html;

还有更多的pythonic吗?

5 个答案:

答案 0 :(得分:5)

怎么样:

a = 1 if x < 1 else 10 if x > 10 else x

它提供了您想要的可读性而没有评论中版本的冗余。它是冗长的,因为它首先定义中心案例然后必须区分两端。这样做可以减少第一个结束,剩下的一切都在范围内。

答案 1 :(得分:4)

如果是数组,可以使用numpy.clip

否则,我认为您的解决方案是最好的解决方案。或者,您可以定义自己的函数,对单个元素执行相同的操作,如果您在多个位置执行此操作。

答案 2 :(得分:2)

您可能会考虑更多pythonic的另一种选择:

if x > 100:
    x = 100
elif x < 1:
    x = 1

答案 3 :(得分:2)

有点不同的东西:

a = (1, x, 100)[-(x<1)+1+(x>100)]

或者如果您将限制定义为

lo, hi = (1, 100)
a = (lo, x, hi)[-(x<lo)+1+(x>hi)]

或重新排列数据,看起来更优雅:

a = (x,lo,hi)[(x<lo)-(x>hi)]

这在python中是可能的,因为布尔值的行为类似于值0和1,允许[]内的数学获得元组的正确索引。

答案 4 :(得分:-1)

a = x if x in range(1,100) else 1 if x < 1 else 100

你真的需要在1开始,并且在100开始?