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

为何ax1.fill()行触发IndexError: list index out of range错误?

为何ax1.fill()行触发IndexError: list index out of range错误?

我来帮你拆解这个报错的核心原因,先看代码里的关键问题:

核心问题:索引变量错误/越界

看你代码里的两处颜色索引:

  1. 绘制等高线时你用的是 colors[I](大写的I)
  2. 但在填充剩余区域的ax1.fill行,你写的是 colors[i](小写的i)

这个小写的i在当前代码片段里没有被正确定义或使用:

  • 如果你是笔误把大写I写成了小写i,而I本身是合法的索引(在colors列表的长度范围内),那修正变量名就能解决;
  • 如果i是你上下文里的其他变量,但这个变量的数值超过了colors列表的长度,就会触发IndexError: list index out of range——比如colors只有3个元素,但i的值是5,自然会越界。

快速修正方案

方案1:修正笔误(最可能的原因)

如果你本来想沿用之前的I(比如外层有for I in range(len(colors))的循环),直接把ax1.fill里的i改成I即可:

ax1.fill(remaining_theta, remaining_r, color=colors[I], alpha=0.3, zorder=2)

方案2:确保索引与列表长度匹配

如果i是你想在contour_paths循环里使用的索引,改用enumerate来遍历,同时保证colors的长度不小于contour_paths的数量:

for idx, path in enumerate(contour_paths):
    # 中间的mask生成、剩余数据提取逻辑不变
    ax1.fill(remaining_theta, remaining_r, color=colors[idx], alpha=0.3, zorder=2)

注意:如果len(contour_paths) > len(colors),还是会触发越界错误,这时候需要补充colors的元素,或者用循环取模的方式(比如colors[idx % len(colors)])来避免越界。

额外提示:你的mask生成逻辑有优化空间

当前你遍历每个网格点去匹配等高线顶点的方式不仅效率极低,还可能因为浮点数精度问题出现误判/漏判。其实可以利用Matplotlib路径的contains_points方法直接生成mask,比如:

# 生成网格点的坐标数组
grid_points = np.column_stack([combined_theta.ravel(), combined_r.ravel()])
# 判断每个网格点是否在等高线路径内部/外部
mask = ~path.contains_points(grid_points)
mask = mask.reshape(combined_theta.shape)

这样能更高效准确地生成你需要的mask,避免嵌套循环的性能问题。

备注:内容来源于stack exchange,提问作者AAA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 15:30:30