私は(度で)の角度を表し、ソートされた値のリストを持っているが含まれる最小範囲を見つける私の目標は最高の範囲(最小値を見つけることです範囲)を指定します。)0360 [範囲内のすべての、</p> <p>をリスト内のすべての角度
いくつかの例:答えは(0,35)
だろうリストangles = [0,1,2,10,20,35]
考える
。
数値が循環的であるため、
angles = [10,20,340,355]
の場合、答えは(340,20)
となります。
私の現在のスクリプトは次のように動作します。
MAX_ANGLE = 360
def get_best_range(angles):
number_of_angles = len(angles)
# Append the list of angles with the same angles plus 360 (max value)
angles = angles + [angle + MAX_ANGLE for angle in angles]
# Create a list of all possible ranges
possible_ranges = [(angles[i], angles[i+number_of_angles - 1]) for i in range(number_of_angles)]
# Find the best range (minimum range)
best_range = min(possible_ranges, key = lambda ang_range: ang_range[1] - ang_range[0])
return best_range[0], best_range[1]%MAX_ANGLE
まあ、それはこれまでのところ、私の最善のアプローチであり、それは私には良いですO(n)は、で動作しますが、ちょうど思われるがPythonでそれを行うより良い方法かもしれません。円形の値を扱うためのツールかもしれませんか?アングルやその他の円形の値で作業するときは、いつも少し面倒です。 1つのライナーはトリックを行う必要があることを
あなたは10と370が同じであると考えてください。角度または異なる? – wim
同じですが、私は常に、 "angles"リストがソートされていると仮定して、[0,360] – DSLima90