我有一个排序过的值列表,表示角度(以度为单位),全部在[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中可能有更好的方法。也许有一些工具可以处理循环值?当我处理角度或其他循环值时总是感到有些麻烦。