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

Python中如何比较列表相邻元素并交换左大于右的项?

在Python中实现相邻元素左大右小互换(单次遍历)

要实现“比较列表相邻数字,左侧大于右侧时互换”的需求,本质是对列表做一轮相邻元素交换遍历,最终将每个较大的元素向右移动到第一个不小于它的元素左侧。以下是具体实现:

方法1:不修改原列表(推荐)

先复制原列表避免修改原始数据,再遍历处理:

def swap_adjacent_larger_left(input_list):
    # 创建列表副本,保护原数据
    processed_list = input_list.copy()
    # 遍历到倒数第二个元素,确保i+1不越界
    for i in range(len(processed_list) - 1):
        if processed_list[i] > processed_list[i+1]:
            # 直接交换相邻元素,无需临时变量
            processed_list[i], processed_list[i+1] = processed_list[i+1], processed_list[i]
    return processed_list

# 测试示例
original = [6, 8, 7, 2, 9]
result = swap_adjacent_larger_left(original)
print(result)  # 输出: [6, 7, 2, 8, 9]

方法2:直接修改原列表

如果不需要保留原列表,可以直接操作:

original = [6, 8, 7, 2, 9]
for i in range(len(original) - 1):
    if original[i] > original[i+1]:
        original[i], original[i+1] = original[i+1], original[i]
print(original)  # 输出: [6, 7, 2, 8, 9]

关键说明

  • 遍历范围:range(len(list)-1)确保每次都能访问到i+1的元素,不会出现索引越界错误。
  • 交换逻辑:Python的元组解包语法a, b = b, a是交换两个变量最简洁的方式,无需额外临时变量。
  • 和冒泡排序的区别:这里只做一轮遍历,而冒泡排序会重复遍历直到没有交换发生(完全排序)。示例中的结果正是一轮遍历后的状态——最大的未排序元素(8)被移动到了第一个比它大的元素(9)左侧。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:36:20