首页 > 解决方案 > 检查值在元组列表中的位置

问题描述

我的程序最终试图根据接收到的角度和象限(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()

标签: pythonlistdictionarytuplesrange

解决方案


看来您的范围大小为 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,依此类推。然后,我们可以将这些整数映射回各自的段。

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


推荐阅读