为什么 .isdigit() 函数 return 在我使用时出错?

Why does the .isdigit() function return an error when I use it?

我正在尝试创建一个函数,当句子通过我的函数时,return将字符串数字作为“NUM”,但出现错误。我的代码如下:

def number_normalise(sentence):
  for token in sentence:
    if sentence[token].isdigit():  # This is the part that returns the error.
      sentence[token] = "NUM"
    else:
      sentence[token]

  return sentence

对于第三行代码,我收到一条错误消息,指出“列表索引必须是整数或切片,而不是 str”。我已经单独测试了这个函数,当它遇到一个只有数字的词(例如“5”、“1802”)时,它应该 return 一个布尔值。有人可以帮助我了解我的代码有什么问题以及如何改进它吗?

我不知道什么是句子变量,但我认为你应该写

...
if token.isdigit():
...

sentence 是一个字符串列表,您正在迭代这些字符串。因此,在第 3 行,您实际上是在尝试从列表中获取特定元素。但是,您传递的不是整数,即 sentence[2],而是一个字符串,即 sentence["apple"],由于显而易见的原因,这是错误的。

我想你想做的是:

def number_normalise(sentence: List[str]):
    for i, token in enumerate(sentence):
      if token.isdigit():  
         sentence[i] = "NUM"

    return sentence

我认为是 sentence[token] 引起了问题。 token 可能是一个字符串,而您应该询问 sentence

中元素的索引