You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 12:01:02