python - 检查值在元组列表中的位置
问题描述
我的程序最终试图根据接收到的角度和象限(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()
解决方案
看来您的范围大小为 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
,依此类推。然后,我们可以将这些整数映射回各自的段。
也可以使用类似的代码直接获取段的开头而不是段本身。
推荐阅读
- android - 发布请求改造 java.lang.IllegalStateException:预期 BEGIN_OBJECT 但在第 2 行第 1 列路径 $
- android - 从 Facebook 下载的文件在我的小米红米 Note 8T 上保存为“downloadfile-x.bin”?
- python - 如何在转换中使用超时来退出状态并停止进一步执行 on_enter_state 函数
- ios - 在 Xcode (Swift) 上编译错误 GSTreamer
- java - 保存和取消保存功能
- react-native - React Native 错误:命令失败:gradlew.bat app:installDebug -PreactNativeDevServerPort=8081
- c# - 如何将 Microsoft.Extensions.DependencyInjection.IServiceScope 注入 .NET Core 中的类
- python-3.x - Python 3.8 函数返回输出问题
- android - 找不到 GeoApiContext 和 DirectionsApiRequest
- r - R:在执行带有后端“doMC”的“foreach”的长任务期间,并行工作者的数量减少