python字符串索引超出范围怎么解决,IndexError:列出python中字符串的索引超出范围...

这篇博客讨论了在Python中尝试从列表中删除元素时遇到'indexoutofbounds'错误的问题。作者指出,从正在迭代的列表中删除元素会导致索引错误,建议使用`list.remove()`方法来安全地移除元素。还提供了其他解决方案,如使用`while`循环或创建新列表。博客强调了避免在迭代时修改列表的重要性,并提供了不同情况下的最佳实践。
摘要由CSDN通过智能技术生成

我想从这个数组中删除"hello"这个词,但是我得到了"index out of bounds"错误。 我检查了len(token)的范围; 它是(0,5)。

这是代码:

token=['hi','hello','how','are','you']

stop='hello'

for i in range(len(token)):

if(token[i]==stop):

del(token[i])

我尝试使用它作为修复方法,但得到相同的错误代码"m =(len(令牌)); n =(len(停止));对于范围(m)中的i:打印(i)范围内的j( n):print(j)if(tokens [i] == stop [j]):del(token [i])m = m-1"但是将它添加到新列表中有帮助。 谢谢

您正在获取索引超出范围的异常,因为您正在从正在迭代的数组中删除项目。

删除该项后,len(token)为4,但for循环重复5次(从初始len(token)返回5)。

有两种方法可以解决这个问题。更好的方法是简单地打电话

token.remove(stop)

这种方式不需要迭代列表,并将自动删除值为stop的数组中的第一项。

从文档:

list.remove(x): Remove the first item from the list whose value is x. It is an error if there is no such item.

鉴于此信息,您可能需要先检查列表是否包含目标元素,以避免抛出ValueError:

if stop in token:

token.remove(stop)

如果元素可以在列表中多次存在,则使用while循环将删除它的所有实例:

while stop in token:

token.remove(stop)

如果由于某种原因需要迭代数组,另一种方法是在del(token[i])之后添加break,如下所示:

for i in range(len(token)):

if(token[i]==stop):

del(token[i])

break

迭代此列表时,不建议删除列表元素。我不确定你的意图,但你可以创建一个没有stop的新列表

token=['hi','hello','how','are','you']

stop='hello'

new_tokens = []

for i in range(len(token)):

if(token[i]!=stop):

new_tokens.append(token[i])

或创建包含所有内容的列表,直到达到停止:

token=['hi','hello','how','are','you']

stop='hello'

new_tokens = []

for i in range(len(token)):

if(token[i]!=stop):

new_tokens.append(token[i])

else:

break

但是永远不要从正在迭代的列表中删除元素,因为这样会修改列表的长度,但range不会。

我不同意任何其他答案,但最Pythonic解决方案是完全摆脱循环并用一行替换它:

token.remove(stop)

这将从列表中删除第一次出现的'hello'。

删除后使用break语句,因为您正在修改要迭代的相同列表。

for i in range(len(token)):

if(token[i]==stop):

del(token[i])

break

删除项目后,列表中的项目不再像原来那样多,因此i会变得太大。此外,如果删除索引i的项目,那么以前位于i+1的元素现在将位于索引i,但您的代码将不会检查它,因为它继续并递增。

您收到此错误的原因有两个:

你在range(len(sequence))的Python中使用反模式。你应该使用for index, value in enumerate(sequence)

当您迭代它时,您正在改变序列。

对range(len(...))的调用仅评估一次。所以当你加星星时它的计算结果为5.一旦你删除了停用词,列表就不再有5个元素,所以token[4]会产生IndexError

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值