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

请求协助修正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("数组已经完全有序,无需交换")

说明:

  1. 用len(arr)正确获取列表长度,循环条件保证i不会超出索引范围。
  2. i += 1逐个遍历相邻元素,直到找到第一个不符合升序的位置。
  3. 增加判断逻辑处理数组完全有序的场景,避免报错。
  4. 用Python元组解包的方式完成交换,简洁且不易出错。

测试你的示例数组,运行后会交换39和19,得到[5, 22, 29, 19, 39, 51, 78, 96, 84],符合你找首对无序元素交换的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 13:20:29