如何在Python中基于x坐标划分已排序的坐标元组列表
按x排序坐标列表的中间划分实现
因为你的列表已经按x坐标升序排序,直接通过索引分割是最简洁高效的方式,能保证两个子列表长度差不超过1(完全符合“大致等长”的要求)。
完整实现代码
def partition(P): n = len(P) mid_index = n // 2 # 按中间索引分割成左右两个子列表 left_sub = P[:mid_index] right_sub = P[mid_index:] return left_sub, right_sub
测试示例
P = [(-4.6, 1), (-2.5, -3), (-1.3, 5), (6, -2)] left, right = partition(P) print("左子列表:", left) # 输出: [(-4.6, 1), (-2.5, -3)] print("右子列表:", right) # 输出: [(-1.3, 5), (6, -2)]
逻辑说明
- 对于长度为偶数的列表(比如你的示例n=4),
n//2得到中间位置的起始索引,分割后两个子列表长度完全相等; - 对于长度为奇数的列表(比如n=5),
n//2=2,左子列表有2个元素,右子列表有3个元素,你也可以调整为mid_index = (n-1)//2,让左子列表更长,根据需求灵活修改即可。
可选:按x值划分(处理重复x场景)
如果你的列表存在多个元素x值等于中间元素的x值,且希望按x值而非索引划分,可以用列表推导式:
def partition_by_x(P): n = len(P) middle_x = P[n // 2][0] left_sub = [p for p in P if p[0] <= middle_x] right_sub = [p for p in P if p[0] > middle_x] return left_sub, right_sub
不过这种方式可能导致两个子列表长度差异较大(比如多个元素x值等于middle_x时),所以优先推荐索引分割的方案。
内容的提问来源于stack exchange,提问作者Marko360
相关产品推荐
相关产品推荐

