ここにPython 3を話しています。数字を指定された値のセットに丸める
私はがvalue_set = [x, y, z]
を想定し、例x, y, z = 1, 3.12, 4
のために私は与えられたフロートを丸くする関数を探しています異なります値のセットに数値を四捨五入しているよ
value_set
長さが変化することは十分汎用的でなければならないことに最も近い数
custom_round(0) --> 1
custom_round(2.7) --> 3.12
お知らせ
ここにPython 3を話しています。数字を指定された値のセットに丸める
私はがvalue_set = [x, y, z]
を想定し、例x, y, z = 1, 3.12, 4
のために私は与えられたフロートを丸くする関数を探しています異なります値のセットに数値を四捨五入しているよ
value_set
長さが変化することは十分汎用的でなければならないことに最も近い数
custom_round(0) --> 1
custom_round(2.7) --> 3.12
お知らせ
キーが絶対値のx-n
(xはリスト内の各項目)である場合、リスト内の最小値を見つけるためにmin関数を使用できます。
value_set = [1, 3.12, 4]
def return_closest(n):
return min(value_set, key=lambda x:abs(x-n))
number_to_check = 3
print (return_closest(number_to_check))
>>> 3.12
あなたが最初のリストをソートすることにより、これを行う、その後、バイナリ検索を使用することができます。
from bisect import bisect_left
class CustomRound:
def __init__(self,iterable):
self.data = sorted(iterable)
def __call__(self,x):
data = self.data
ndata = len(data)
idx = bisect_left(data,x)
if idx <= 0:
return data[0]
elif idx >= ndata:
return data[ndata-1]
x0 = data[idx-1]
x1 = data[idx]
if abs(x-x0) < abs(x-x1):
return x0
return x1
あなたはよりのようなあなたのCustomRound
を構築することができます。
values = [1,3.12,4]
custom_round = CustomRound(values)
と、単にそれを呼び出します。
>>> custom_round(0)
1
>>> custom_round(0.5)
1
>>> custom_round(1.5)
1
>>> custom_round(2.5)
3.12
>>> custom_round(3.12)
3.12
>>> custom_round(3.9)
4
>>> custom_round(4.1)
4
>>> custom_round(4.99)
4
このアプローチは、建設ためとO(N Nログ)を丸めるためO(ログn)で動作します。したがって、あなたはcustom_round
を構築するためにある程度の時間を投資しますが、それを頻繁に呼び出すと、最終的には個々の数値を丸めて返済します。
見てください[こちら](http://stackoverflow.com/questions/12141150/from-list-of-integers-get-number-closest-to-a-given-value) – nlsdfnbch
Excatly私が必要なもの – bluesummers