更新しました。下を見てください。
ハマった!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」があるかを示す辞書を作成します。巨大なリストで動作するはずです。誰にもヒントはありますか?反復して各文字を選択し、辞書の値を割り当てたいと思います。
編集番号2:
皆さんからの大きな助けのおかげで、私のコードは次のように美しく見えます:
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
エラーの原因がわかりません。