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

使用Python的.isdigit()函数时报列表索引类型错误该如何解决?

问题分析

你代码触发报错的核心原因是列表遍历逻辑错误:

  • 执行for token in sentence时,迭代得到的token是列表的元素本身(即字符串类型的分词结果,例如"5"、"test"),并非元素对应的下标索引。你直接拿字符串作为索引访问sentence[token],自然会触发「列表索引必须是整数或切片,不能是字符串」的报错。
  • 此外你的代码还存在两处冗余问题:else分支无任何执行逻辑,属于无效代码;直接修改传入的列表对象会改动原输入,可能引发预期外的副作用。
优化方案

场景1:输入为预分词后的列表

如果你的sentence参数是已经拆分好的分词列表,可直接用以下两种写法:

写法1(推荐,不修改原输入):

def number_normalise(sentence):
    processed = []
    for token in sentence:
        processed.append("NUM" if token.isdigit() else token)
    return processed

更简洁的列表推导式版本:

def number_normalise(sentence):
    return ["NUM" if token.isdigit() else token for token in sentence]

写法2(直接修改原列表,按需使用):

如果确实需要修改原输入列表,可通过enumerate获取下标操作:

def number_normalise(sentence):
    for idx, token in enumerate(sentence):
        if token.isdigit():
            sentence[idx] = "NUM"
    return sentence

场景2:输入为未分词的完整字符串

如果传入的是整句字符串,可先拆分再处理,以英文句子为例:

def number_normalise(sentence: str):
    # 按空格拆分英文句子
    tokens = sentence.split()
    processed_tokens = ["NUM" if token.isdigit() else token for token in tokens]
    # 拼接回字符串返回
    return " ".join(processed_tokens)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:36:04