在VBA中识别坐标数组重复点(附Python参考代码)
识别散点图中的重复坐标点
你的思路已经很清晰啦——遍历每个坐标对、记录已出现的点,遇到重复就标记出来。下面我帮你梳理下现有代码的逻辑,再给出更高效的优化方案,方便后续扩展调整标记尺寸的功能~
原始代码逻辑解析
你当前的代码已经能成功检测重复点,先来看下它的运行逻辑:
x = [1,2,2,4,5,5,5] y = [1,3,3,4,5,5,5] pts = [] for i in range(len(x)): cX = x[i] cY = y[i] if (cX, cY) in pts: print("duplicate") print(cX, cY) # 后续可在此处添加标记尺寸调整的代码 else: pts.append((cX, cY)) print(pts)
- 用空列表
pts存储已经出现过的唯一坐标对 - 遍历每个索引,取出对应的(x,y)组合
- 若坐标对已在
pts中,打印重复提示;否则将其加入列表 - 最后输出所有不重复的坐标点
不过当数据量较大时,列表的in操作效率偏低(每次都要遍历整个列表),换成字典或者collections.Counter会更高效,还能顺便统计重复次数——正好为后续调整标记尺寸做准备。
优化方案:统计重复次数(适配后续需求)
如果想知道每个点具体重复了多少次,用collections.Counter可以一键完成统计,代码更简洁高效:
from collections import Counter x = [1,2,2,4,5,5,5] y = [1,3,3,4,5,5,5] # 将x、y数组打包成坐标对列表 coordinates = list(zip(x, y)) # 统计每个坐标对的出现频次 point_counts = Counter(coordinates) # 遍历识别重复点并打印信息 for coord, count in point_counts.items(): if count > 1: print(f"重复点: {coord},重复次数: {count}") else: print(f"唯一点: {coord}") # 单独提取所有重复点及其次数 duplicate_points = {coord: count for coord, count in point_counts.items() if count > 1} print("\n所有重复点统计:", duplicate_points)
这段代码的输出结果:
唯一点: (1, 1) 重复点: (2, 3),重复次数: 2 唯一点: (4, 4) 重复点: (5, 5),重复次数: 3 所有重复点统计: {(2, 3): 2, (5, 5): 3}
后续扩展:调整标记尺寸(提前准备)
等你要绘制散点图时,可以直接用统计出的次数设置标记大小,比如:
import matplotlib.pyplot as plt # 基础大小 × 重复次数 = 最终标记尺寸 base_size = 50 sizes = [base_size * point_counts[coord] for coord in coordinates] plt.scatter(x, y, s=sizes) plt.show()
这样重复次数越多的点,标记就越大,完全贴合你的后续需求~
内容的提问来源于stack exchange,提问作者Markus T.
相关产品推荐
相关产品推荐

