簡體   English   中英

在Python中獲取最小值和最大值之間的值

[英]Get a value between min and max values in Python

如果它在最小值和最大值之間,我不會得到一個值。 如果該值小於min,我想得到最小值,如果它大於max,我想得到最大值。 我現在使用這個代碼,但是有一種內置或更智能的方法嗎?

def inBetween(minv, val, maxv):
  if minv < val < maxv: return val
  if minv > val:        return minv
  if maxv < val:        return maxv

print inBetween(2,5,10) 

使用minmax

>>> def inbetween(minv, val, maxv):
...     return min(maxv, max(minv, val))
... 
>>> inbetween(2, 5, 10)
5
>>> inbetween(2, 1, 10)
2
>>> inbetween(2, 11, 10)
10

記錄:這種功能通常稱為clamp (如鉗位 ),有時也稱為clip clamp(val, minv, maxv)找到的簽名是clamp(val, minv, maxv) 如果由於函數開銷而不喜歡使用函數minmax的慣用解決方案,則可以使用此解決方案:

def clamp(val, minv, maxv):
    return minv if val < minv else maxv if val > maxv else val

一個快速的性能檢查:

>>> import timeit
>>> timeit.timeit("clamp(1, 5, 10)", "def clamp(val, minv, maxv): return min(maxv, max(minv, val))")
1.8955198710000332
>>> timeit.timeit("clamp(1, 5, 10)", "def clamp(val, minv, maxv): return minv if val < minv else maxv if val > maxv else val")
0.5956520039999305

將它們放在列表中,對列表進行排序,選擇中間元素。

>>> def inbetween(minv,val,maxv):
...     return sorted([minv,val,maxv])[1]
... 
>>> inbetween(2,5,10)
5
>>> inbetween(2,1,10)
2
>>> inbetween(2,11,10)
10

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM