我有排序的值列表表示角度(度),所有的最小范围[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