2016-07-08 1 views
-1

ich den folgenden Code versuchenIndexerror: Listenzuordnung Index außerhalb des zulässigen Bereichs für nicht-leere Liste

def getCount(mySet): 
    l = len(mySet) 
    hsh={} 
    lSet=[] 
    rSet=[] 
    for i in range(0,l-1): 
     for j in range(i+1,l): 
      if ((mySet[i]+mySet[j])%k==0): 
       lSet = mySet 
       rSet = mySet 
       print "i, j ", i,j 
       del lSet[i] 
       del rSet[j] 
       if len(lSet)==0 or len(rSet==0): 
        return 0 
       left = getCount(lSet) 
       right = getCount(rSet) 
       if left==right: 
        return left 

    return len(lSet) 

n,k = [int(i) for i in raw_input().split(" ")] 

mySet=[] 

for x in raw_input().split(" "): 
    mySet.append(int(x)) 

print getCount(mySet) 

wo ein Beispiel Eingang

5 5 
2 4 1 6 8 

jedoch, erhalte ich den Fehler

del rSet[j] 
IndexError: list assignment index out of range 

Ich verstehe nicht, warum das ist. Wie ist j außerhalb der Reichweite ?. In der Zeile oberhalb ausgedruckt, ich

i, j 0 4 

Antwort

1

I don't understand why this is. How is j out of range?. In the line above, I printed out

Das ist, weil Sie der Moment lSet[i], das gleiche Element von rSet auch gelöscht wird gelöscht! Und das passiert, weil beide Variablen lSet und rSet sich auf die gleiche Variable beziehen. Um eine Kopie zu erstellen, würden Sie tun:

lSet = mySet[:] 
rSet = mySet[:] 
+0

zu umgehen, die Veränderlichkeit Ausgabe, können Sie auch 'verwenden deepcopy' aus der [Kopie] (https://docs.python.org/2/library/copy. html) Bibliothek zum Erstellen separater Sets – af3ld

+0

Wahr, aber in diesem Fall nicht erforderlich, da die Liste nur ganze Zahlen enthält. – SuperSaiyan

+0

Definitiv nicht erforderlich; nur eine weitere Option – af3ld

Verwandte Themen