【问题标题】:Checking where value falls in a list of tuples检查值在元组列表中的位置
【发布时间】:2020-01-12 21:33:12
【问题描述】:

我的程序最终试图根据接收到的角度和象限 (1, 2, 3, 4) 输出从 a 点到 b 点的方向。我创建了一个字典,键作为角度切片(低,高),值作为方向。

然后我将键(元组键)发送到列表。我想知道如何访问元组键(范围)并查看接收到的角度在元组列表的指定值内的位置。例如:如果我收到一个 11 的角度,它将落在“00.00 - 11.25”范围内(元组)。

一旦我确定了角度值所在的范围,我就可以根据象限,使用某种 if 语句从与键(元组范围)关联的字典值中得出方向。

def compute_direction(angle, quadrant):
    directionDict = {
        (00.00, 11.25): ["E", "N", "W", "S"],
        (11.25, 33.75): ["ENE", "NNW", "WSW", "SSE"],
        (33.75, 56.25): ["NE", "NW", "SW", "SE"],
        (56.25, 78.75): ["NNE", "WNW", "SSW", "ESE"],
        (78.75, 90.00): ["N", "W", "S", "E"]
    }
    directionKeys = directionDict.keys()

【问题讨论】:

标签: python list dictionary tuples range


【解决方案1】:

您的范围的大小似乎是 22.5。在这种情况下,您可以使用整数除法来计算角度落在哪里。

locations = [(00.00, 11.25), (11.25, 33.75), (33.75, 56.25), (56.25, 78.75), (78.75, 90.00)]
location_index = int((angle+11.25)//22.5)
current_location = locations[location_index]

本质上,我们要做的就是将范围 [0,90] 划分为 5 个不同的段。外部的两个长度为 11.25,中间的长度为 22.5。为了方便起见,我们实际上将段划分为 [-11.25,101.25] 到 5 个等长段。这个除法本身是通过整数除法//完成的,返回除法的整个部分。

也就是说,[-11.25,11.25) 将返回0,[11.25,33.75) 将返回1 等等。然后,我们可以将这些整数映射回各自的段。

也可以直接获取段的开头而不是段本身,使用类似的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 2016-05-10
    • 1970-01-01
    相关资源
    最近更新 更多