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

Python列表重排:最大化元素新位置与原位置的最小距离

实现列表元素的最优远距离重排(可恢复)

要实现满足要求的列表重排——让每个元素新位置尽可能远离原位置,且支持确定性恢复,最优方案是固定偏移量的循环移位法,核心是取偏移量为列表长度的向上半长,具体如下:

方法原理

对于长度为n的列表,偏移量取shift = (n + 1) // 2:

  • 当n为偶数时,每个元素会被移动n/2位,这是元素能移动的最大无冲突距离,所有元素的位置与原位置距离相等,达到最优。
  • 当n为奇数时,除原中间元素外,其余元素移动(n+1)//2位,所有元素的最小位置距离为(n-1)//2,这是奇数长度下能实现的最大最小距离(避免了反转方法中中间元素位置不变的问题)。

该方法完全是确定性计算,无需随机操作,只需记录偏移量即可轻松恢复原列表。

Python代码实现

重排函数

def optimal_rearrange(lst):
    n = len(lst)
    shift = (n + 1) // 2
    # 循环移位:将列表后shift个元素移到前面
    rearranged = lst[shift:] + lst[:shift]
    # 返回重排后的列表和偏移量,用于恢复
    return rearranged, shift

恢复函数

def restore_rearranged(rearranged_lst, shift):
    n = len(rearranged_lst)
    # 逆移位:用总长度减去原偏移量得到恢复所需的偏移量
    restore_shift = n - shift
    return rearranged_lst[restore_shift:] + rearranged_lst[:restore_shift]

示例验证

  • 偶数长度列表:

    original = [0, 1, 2, 3]
    rearranged, shift = optimal_rearrange(original)
    # 重排结果:[2, 3, 0, 1],每个元素与原位置距离均为2
    restored = restore_rearranged(rearranged, shift)
    # 恢复结果:[0, 1, 2, 3]
    
  • 奇数长度列表:

    original = [0, 1, 2, 3, 4]
    rearranged, shift = optimal_rearrange(original)
    # 重排结果:[2, 3, 4, 0, 1],元素位置距离分别为3、3、2、2、2,最小距离为2(已达最优)
    restored = restore_rearranged(rearranged, shift)
    # 恢复结果:[0, 1, 2, 3, 4]
    

内容的提问来源于stack exchange,提问作者mangotango

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 19:53:32