gpt4 book ai didi

Python:IndexError:列表索引超出范围错误

转载 作者:行者123 更新时间:2023-11-28 21:58:52 28 4
gpt4 key购买 nike

已更新,看底!

我卡住了!我收到一个 IndexError: list index out of range 错误。

def makeInverseIndex(strlist):
numStrList = list(enumerate(strlist))
n = 0
m = 0
dictionary = {}
while (n < len(strList)-1):
while (m < len(strlist)-1):
if numStrList[n][1].split()[m] not in dictionary:
dictionary[numStrList[n][1].split()[m]] = {numStrList[n][0]}
m = m+1
elif {numStrList[n][0]} not in dictionary[numStrList[n][1].split()[m]]:
dictionary[numStrList[n][1].split()[m]]|{numStrList[n][0]}
m = m+1
n = n+1
return dictionary

它给我这个错误

>>> makeInverseIndex(s)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "./inverse_index_lab.py", line 23, in makeInverseIndex
if numStrList[n][1].split()[m] not in dictionary:
IndexError: list index out of range

我不明白...这是什么原因造成的?即使我改变 while 循环的条件,它也会发生。我不明白是什么问题。我对此很陌生,所以请像一片西兰花问你这个问题时那样解释。

编辑:

谢谢大家,我忘记说输入的例子了,我想输入这样的东西:

 L=['A B C', 'B C E', 'A E', 'C D A']

并将其作为输出:

D={'A':{0,2,3}, 'B':{0,1}, 'C':{0,3}, 'D':{3}, 'E':{1,2}}

因此创建一个字典,显示列表中您可能会找到“A”的位置。它应该适用于一个巨大的列表。有人有什么建议吗?我希望它迭代并挑选出每个字母,然后为它们分配一个字典值。

编辑第二条:

感谢你们的大力帮助,我的代码看起来很漂亮:

def makeInverseIndex(strList):
numStrList = list(enumerate(strList))
n = 0
dictionary = {}
while (n < len(strList)):
for word in numStrList[n][1].split():
if word not in dictionary:
dictionary[word] = {numStrList[n][0]}
elif {numStrList[n][0]} not in dictionary[word]:
dictionary[word]|={numStrList[n][0]}
n = n+1

return dictionary

但是当我尝试运行该模块时,我仍然设法得到这个错误:

   >>> makeInverseIndex(L)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "./inverse_index_lab.py", line 21, in makeInverseIndex
for word in numStrList[n][1].split():
NameError: global name 'StrList' is not defined

我看不出错误是从哪里来的。

最佳答案

很高兴看到一些聪明的蔬菜编程。

首先,你的问题。正如@Vasiliy 所说,您有 3 个索引。 n没关系,因为你用你的 while 保护它健康)状况。 1很好,因为enumerate总是产生两件事。那只剩下 m .这是你的问题。

假设您有 N strlist 中的元素.对于每个元素 estrlist ,你申请split()给它。 e.split() 中的元素数量并不总是等于 N . m 的 while 条件防范N , 不反对 len(e.split()) ,因此索引超出范围。

要解决这个问题,首先拆分字符串,然后循环遍历它。当你这样做的时候,不妨摆脱 m总而言之,只拆分字符串一次,并获得一些性能。另外,您永远不会重置您的 m ,它只会不断增长。

while (n < len(strList)):
for word in numStrList[n][1].split():
if word not in dictionary:
dictionary[word] = {numStrList[n][0]}
elif {numStrList[n][0]} not in dictionary[word]:
dictionary[word]|={numStrList[n][0]}
n = n+1

其次,你的while条件限制太多。 n < len(strlist)很好。

关于Python:IndexError:列表索引超出范围错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17479465/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com