按X坐标分组点数据时出现数据丢失问题求助
问题分析与修复
你的代码存在两个关键问题导致数据丢失:
- Python中不存在
NULL关键字,应使用None,这是语法规范问题,若未修正会直接报错。 - 循环结束后未处理最后一组数据:遍历完所有点后,最后一个分组的内容仍留在
groupe列表中,但没有被添加到结果列表里,这是大量数据丢失的核心原因。
修复后的代码如下:
def sortPoints(points): prev = None sorted_list = [] groupe = [] for p in points: if prev is None: prev = p[0] if p[0] == prev: groupe.append(p) else: sorted_list.append(groupe.copy()) groupe = [] prev = p[0] # 循环结束后添加最后一组数据 if groupe: sorted_list.append(groupe) return sorted_list
关键修改说明
- 替换
NULL为Python标准的None,修正语法错误。 - 循环结束后检查
groupe是否非空,确保最后一组数据被加入结果。 - 将变量名
sorted改为sorted_list,避免与Python内置函数sorted()重名冲突。 - 用
groupe.copy()替代groupe[:],语义更清晰,二者效果一致。
测试示例数据:
arr = [(1,2), (1,3), (1,4), (2,1), (2,3)] print(sortPoints(arr)) # 输出:[[(1, 2), (1, 3), (1, 4)], [(2, 1), (2, 3)]]
如果你的原始点数据未按X坐标预先排序,上述代码会失效(比如点顺序为[(1,2), (2,1), (1,3)]时分组错误)。这种情况推荐使用itertools.groupby实现,无需预先排序:
from itertools import groupby def sortPoints(points): # 先按X坐标排序,再分组 sorted_points = sorted(points, key=lambda x: x[0]) return [list(group) for key, group in groupby(sorted_points, key=lambda x: x[0])]
这个方法更健壮,无论原始数据顺序如何都能正确分组。
内容的提问来源于stack exchange,提问作者Fnoefen
相关产品推荐
相关产品推荐

