我有排序的值列表表示角度(度),所有的最小範圍[0,360)發現,包括在範圍列表中的所有角度
我的目標是找到最好的範圍(最小範圍)適合列表中的所有角度。
一些例子:
給出的列表
angles = [0,1,2,10,20,35]
答案是(0,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中。也許有些工具可以使用循環值?處理角度或其他循環值時,我總是有點麻煩。
你認爲10和370是一樣的角度還是不同? – wim
一樣,我始終代表該範圍內的角度[0,360) – DSLima90