您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – 找到包含列表中所有角度的最小范围

5b51 2022/1/14 8:21:46 python 字数 1720 阅读 551 来源 www.jb51.cc/python

我有一个表示角度(以度为单位)的排序值列表,全部在[0,360]范围内我的目标是找到适合列表中所有角度的最佳范围(最小范围).一些例子:>鉴于列表角度= [0,1,2,10,20,35],答案将是(0,35).>鉴于列表角度= [10,20,340,355],由于值的循环性质,答案将是(340,20).我当前的脚本如下:MAX_ANGLE = 3

概述

我有一个表示角度(以度为单位)的排序值列表,全部在[0,360]范围内

我的目标是找到适合列表中所有角度的最佳范围(最小范围).

一些例子:

>鉴于列表角度= [0,1,2,10,20,35],答案将是(0,35).
>鉴于列表角度= [10,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中可能有更好的方法.也许有些工具可以使用循环值?在处理角度或其他圆形值时,我总是有点麻烦.

max(zip(angles,angles[1:] + [360+angles[0]]),key = lambda x: x[1]-x[0])

(如果需要,您可以在之后将答案更改为小于360的值)

总结

以上是编程之家为你收集整理的python – 找到包含列表中所有角度的最小范围全部内容,希望文章能够帮你解决python – 找到包含列表中所有角度的最小范围所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶