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

Python遍历二维数组做文本切片时第二列索引失效问题

问题根因

该问题和NumPy无关,是典型的Python缩进错误,不需要引入第三方库即可修复。
Python通过缩进判定代码块归属,你贴出的修改后代码存在明显的缩进错位:

  • 循环内读取project_id、project_text并打印原始值的代码缩进正确,属于每次迭代都会执行的逻辑,因此你能看到project_id随索引正常递增输出
  • 文本截断的if/else逻辑、以及截断后内容的打印代码缩进层级和循环体不一致,解释器判定这部分代码不属于for循环的迭代块:trunc_proj_text仅在第一次循环时被赋值为第一行文本的截断结果,后续迭代不会更新该变量值,因此最终会重复输出40次第一行的截断结果。

这种缩进错位通常是写代码时混用Tab键和空格、手动调整缩进时对齐不一致导致的,和数组索引、切片逻辑没有关系,你之前查的NumPy数组遍历、列表切片相关内容和当前场景不匹配。

修复方案
  1. 统一代码缩进,Python官方推荐每级缩进使用4个空格,禁止Tab和空格混用。修复后的可运行代码如下:
# 原数组追加逻辑无需改动
# project_information.append([proj_id, project_text])

for i in range(len(project_information)):
    # 循环内所有代码保持同一缩进层级
    project_id = project_information[i][0]
    project_text = project_information[i][1]
    print(project_id)
    print(project_text)

    if len(project_text) > 5000:
        trunc_proj_text = project_text[:1000]
    else:
        trunc_proj_text = project_text

    print(project_id)
    print(trunc_proj_text)
  1. 更稳妥的写法是直接对二维列表做解包遍历,省去手动维护索引的步骤,从写法上减少索引错误、缩进错误的概率:
for project_id, project_text in project_information:
    print(project_id)
    print(project_text)
    # 截断逻辑可以简化为三元表达式
    trunc_proj_text = project_text[:1000] if len(project_text) > 5000 else project_text
    print(project_id)
    print(trunc_proj_text)

补充说明:不建议针对当前场景使用NumPy,NumPy数组处理变长字符串时会自动做类型对齐,反而会出现文本截断、类型转换异常的问题,用原生列表遍历是效率最高、适配性最好的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 04:06:31