【发布时间】:2013-07-05 00:08:32
【问题描述】:
更新了,往下看!
我被困住了!我得到一个 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
我看不出错误来自哪里。
【问题讨论】:
-
numStrList[n][1].split()[m]- 你在这里有三个索引:n、1、m - 它们中的每一个都可能导致这个错误 - 这种行为完全取决于输入数据 - 检查你numStrList包含的内容print numStrList. -
不相关但可以将
while (n < len(StrList)-1):中的StrList修改为strlist -
谢谢@misguided 我没看到那个
标签: python list python-3.x