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

Python数组遍历循环异常:元素交换失效及索引越界问题求助

问题分析与解决方案

原代码的问题

  • 交换逻辑错误:原代码中numbers[-1], numbers[i] = numbers[i], numbers[-1]是在交换最后一个元素和numbers[i],但i是之前生成数组循环的变量,最终值为9(和numbers[-1]的索引一致),相当于同一个元素自我交换,数组自然无变化。
  • 循环控制失效:for a in range(10)会自动将a依次赋值为0-9,手动添加a = a + 2会被循环的下一次迭代覆盖,无法实现步长为2的遍历。
  • 赋值而非交换+索引越界:numbers[a] = numbers[a+1]只是用后一个元素覆盖前一个,不是交换操作;当a遍历到9时,a+1=10超出数组的最大索引9,触发IndexError。

正确实现代码

from random import randint

# 生成包含10个1-10随机数的数组
numbers = []
for i in range(10):
    numbers.append(randint(1, 10))
# 也可以用更简洁的列表推导式:numbers = [randint(1, 10) for _ in range(10)]

print("原数组:", numbers)

# 遍历成对元素的第一个索引,步长为2
for a in range(0, 10, 2):
    # 交换当前索引与下一个索引的元素
    numbers[a], numbers[a+1] = numbers[a+1], numbers[a]

print("转换后数组:", numbers)

关键说明

  • 使用range(0, 10, 2)生成索引0、2、4、6、8,确保a+1的最大值为9,不会超出数组索引范围。
  • Python的元组解包语法x, y = y, x是实现元素交换的简洁方式,无需临时变量,也不会出现值覆盖问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 09:35:21