Python遍历列表随机交换元素时出现索引越界错误求解
问题分析与修复
错误根源
- 随机索引越界:
random.randint(1, len(lst))会生成1到10的整数(当前len(lst)为10),但列表的有效索引范围是0到9,当随机值取到10时必然触发索引越界错误。 - 循环变量误用:
for i in lst遍历的是列表的元素值而非索引。虽然初始元素刚好和索引对应,但交换后如果元素值超出索引范围(比如后续修改列表结构),会直接导致索引错误,这是潜在的逻辑漏洞。
修复代码
import random p = 0.5 # 替换成你的目标概率值 lst = [x for x in range(10)] # 遍历列表索引而非元素 for i in range(len(lst)): # 生成0到列表长度-1之间的合法随机索引 random_index = random.randint(0, len(lst)-1) if random.random() <= p: lst[i], lst[random_index] = lst[random_index], lst[i]
核心修改说明
- 改用
for i in range(len(lst))遍历列表索引,确保i始终是合法的索引值。 - 将随机索引的范围修正为
0到len(lst)-1,彻底避免生成超出列表边界的索引。
内容的提问来源于stack exchange,提问作者Ryan Sheridan
相关产品推荐
相关产品推荐

