Python中角度列表区间匹配与数量统计的代码问题排查及修正
问题排查与解决方案
错误原因分析
- 条件判断逻辑完全错误:原代码中
if angle_circle[j] < angle_geometry[i] > angle_circle[j+1]的逻辑是判断角度同时大于区间两端值,这和"匹配区间"的需求完全相悖。正确逻辑应该是判断角度处于[angle_circle[j], angle_circle[j+1})区间内。 - 冗余无效代码:
else分支的node_container[j] = node_container[j]没有任何实际作用,属于冗余代码。 - 未提前终止内层循环:找到匹配区间后仍继续遍历所有区间,导致无意义的性能浪费。
正确实现代码
基础修复版本
先初始化全0的node_container,修正条件判断并优化循环逻辑:
angle_circle = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230, 240, 250, 260, 270, 280, 290, 300, 310, 320, 330, 340, 350, 360] angle_geometry = [252.41, 242.53, 214.7, 151.7, 166.43, 141.58, 119.48, 82.57, 50.44, 33.31, 11.31, 20.22, 66.8, 288.43, 276.84, 274.18] # 初始化node_container,长度等于区间数量(circle列表长度-1) node_container = [0] * (len(angle_circle) - 1) for angle in angle_geometry: for j in range(len(angle_circle)-1): # 匹配左闭右开区间:[angle_circle[j], angle_circle[j+1}) if angle_circle[j] <= angle < angle_circle[j+1]: node_container[j] += 1 break # 找到区间后立即终止内层循环 print(node_container)
运行结果与预期完全一致:
[0, 1, 0, 0, 2, 0, 1, 0, 0, 3, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
高效优化版本(使用bisect模块)
由于angle_circle是严格递增的有序列表,可利用Python内置bisect模块快速定位区间,将时间复杂度从O(n*m)降至O(n log m):
import bisect angle_circle = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230, 240, 250, 260, 270, 280, 290, 300, 310, 320, 330, 340, 350, 360] angle_geometry = [252.41, 242.53, 214.7, 151.7, 166.43, 141.58, 119.48, 82.57, 50.44, 33.31, 11.31, 20.22, 66.8, 288.43, 276.84, 274.18] node_container = [0] * (len(angle_circle) - 1) for angle in angle_geometry: # 找到第一个大于当前角度的区间端点索引,减1即为对应区间的下标 idx = bisect.bisect_left(angle_circle, angle) - 1 # 处理角度等于360的边界情况,将其归入最后一个区间 if idx == len(node_container): idx -= 1 node_container[idx] += 1 print(node_container)
补充说明
- 区间开闭:示例采用左闭右开逻辑,若需左开右闭,可将条件改为
angle_circle[j] < angle <= angle_circle[j+1],同时将bisect_left替换为bisect_right。 - 边界处理:优化版本已考虑角度等于360的情况,确保其被统计到350-360区间内。
内容的提问来源于stack exchange,提问作者Urvesh
相关产品推荐
相关产品推荐

