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
相关产品推荐
相关产品推荐

