def collect_points(random_gujiapoints, lunk_pos): """ :param random_gujiapoints: :param lunk_pos: :return: """ result = [] for point in random_gujiapoints: dirx = [] # 相同x diry = [] # 相同y # 计数器,记录与 lunk_pos 重合的点数 vertical_pos_count = 0 level_pos_count = 0 x, y = point original_y = y original_x = x # 检查垂直方向 if vertical_pos_count < 2 and vertical_pos_count==0: y += 1 if (x, y) in lunk_pos: dirx.append((x, y)) vertical_pos_count += 1 y = original_y if vertical_pos_count < 2: y -= 2 if (x, y) in lunk_pos: dirx.append((x, y)) vertical_pos_count += 1 y = original_y # 检查水平方向 if level_pos_count < 2 and level_pos_count==0: x += 1 if (x, y) in lunk_pos: diry.append((x, y)) level_pos_count += 1 x = original_x if level_pos_count < 2: x -= 2 if (x, y) in lunk_pos: diry.append((x, y)) level_pos_count += 1 x = original_x distance_vertical = pz.EuclideanDis(dirx[0], dirx[1]) distance_level = pz.EuclideanDis(diry[0], diry[1]) if distance_vertical < distance_level: result.append(["Vertical",distance_vertical]) else: result.append(["Horizontal", distance_level]) return result 请帮我优化代码
时间: 2024-02-14 21:28:26 浏览: 77
可以优化的几个方面包括:
1. 减少重复计算:在检查垂直和水平方向时,可以将相同的代码抽取出来,避免重复计算。可以使用一个循环来遍历方向并判断重合点的情况。
2. 简化条件判断:可以将 `vertical_pos_count==0` 和 `level_pos_count==0` 的条件判断去掉,因为在进入到这个逻辑之前已经进行了相应的判断。
3. 提前结束循环:在找到两个重合点后,可以使用 `break` 语句提前结束循环,避免不必要的迭代。
4. 返回结果的位置:将 `return result` 移动到循环结束后,确保返回所有结果。
下面是优化后的代码:
```python
def collect_points(random_gujiapoints, lunk_pos):
"""
:param random_gujiapoints:
:param lunk_pos:
:return:
"""
result = []
for point in random_gujiapoints:
dirx = [] # 相同x
diry = [] # 相同y
# 计数器,记录与 lunk_pos 重合的点数
vertical_pos_count = 0
level_pos_count = 0
x, y = point
original_y = y
original_x = x
# 检查垂直方向
for _ in range(2):
y += (-1) ** _ # 在循环中通过取反来实现1和-1的切换
if (x, y) in lunk_pos:
dirx.append((x, y))
vertical_pos_count += 1
y = original_y
if vertical_pos_count == 2:
break
# 检查水平方向
for _ in range(2):
x += (-1) ** _ # 在循环中通过取反来实现1和-1的切换
if (x, y) in lunk_pos:
diry.append((x, y))
level_pos_count += 1
x = original_x
if level_pos_count == 2:
break
distance_vertical = pz.EuclideanDis(dirx[0], dirx[1])
distance_level = pz.EuclideanDis(diry[0], diry[1])
if distance_vertical < distance_level:
result.append(["Vertical", distance_vertical])
else:
result.append(["Horizontal", distance_level])
return result
```
这样做的好处是减少了重复计算,简化了条件判断,并且提前结束了循环。同时,将返回结果的位置放在正确的位置上,确保返回所有结果。
阅读全文