1

更新しました。下を見てください。

ハマった!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

エラーの原因がわかりません。

4

3 に答える 3