请求协助修正Python代码:找出并交换首对无序元素
修正代码实现首对无序元素交换
先看你代码里的几个问题:
- Python列表获取长度用
len(arr),不是arr.len(),后者是其他语言的写法,会直接报错。 i += i逻辑错误,这会让i要么停在0要么翻倍跳跃,应该改成i += 1来逐个检查相邻元素。- 交换元素的代码缩进错误,而且直接
arr[i] = arr[i+1]; arr[i+1] = arr[i]会把两个元素都变成同一个值,需要用正确的交换方式。 - 没考虑数组完全有序的情况,容易出现索引越界。
修正后的代码:
arr = [5, 22, 29, 39, 19, 51, 78, 96, 84] i = 0 # 遍历找到第一对前一个大于后一个的元素 while i < len(arr) - 1 and arr[i] < arr[i+1]: i += 1 # 仅当找到无序对时执行交换,避免数组完全有序时索引越界 if i < len(arr) - 1: # Python特有交换写法,无需临时变量 arr[i], arr[i+1] = arr[i+1], arr[i] print(f"交换后数组: {arr}") else: print("数组已经完全有序,无需交换")
说明:
- 用
len(arr)正确获取列表长度,循环条件保证i不会超出索引范围。 i += 1逐个遍历相邻元素,直到找到第一个不符合升序的位置。- 增加判断逻辑处理数组完全有序的场景,避免报错。
- 用Python元组解包的方式完成交换,简洁且不易出错。
测试你的示例数组,运行后会交换39和19,得到[5, 22, 29, 19, 39, 51, 78, 96, 84],符合你找首对无序元素交换的需求。
内容的提问来源于stack exchange,提问作者DevTuck
相关产品推荐
相关产品推荐

