2017-03-11 5 views
-2

Hier ist mein Code:Was mit meinem Code falsch ist (Python)

def extractEachKth(inputArray, k): 
    n = [] 
    for i in inputArray: 
     n.append(i) 
    for i in range(1, len(n) + 1): 
     if i % k == 0: 
      n.remove(n[i-1]) 
    return (n) 
    print (extractEachKth([1,2,3,4,5,6,7,8,9,10],3)) 

und hier ist mein Fehler:

Traceback (most recent call last): 
    File "C:/Users/Harry/Documents/randompythonprograms/editable.py", line 9, in <module> 
    print (extractEachKth([1,2,3,4,5,6,7,8,9,10],3)) 
    File "C:/Users/Harry/Documents/randompythonprograms/editable.py", line 7, in extractEachKth 
    n.remove(n[i-1]) 
    IndexError: list index out of range 
+1

ändern es 'for i in range (1, len (n))' – rassar

+0

Wir wissen nicht, Was Sie wollen, dass Ihr Code funktioniert, ist es schwer für uns, Ihnen zu helfen. – byxor

+3

'n.remove (n [i-1])' dies verursacht das Problem, da Sie Werte aus der Liste entfernen und bis 'n' schleifen, so dass es nicht die gleiche Größe haben wird, dh die Länge der Liste reduce und gibt dir 'index out of bound error', dein Bereich ist korrekt –

Antwort

0

Dieses: n.remove(n[i-1]) das Problem verursacht, da Sie Entfernen von Werten aus der Liste und Schleifen bis len(n), so wird es nicht die gleiche Größe haben, dh, die Länge der Liste wird sich verringern und Ihnen index out of bound error geben, ist Ihr Bereich richtig.

Sie können es lösen, indem die N aktualisieren, wenn Sie einen Wert entfernen, wie folgt aus:

def extractEachKth(inputArray, k): 
    n = [] 
    for i in inputArray: 
     n.append(i) 
    i = 1 
    N = len(n) + 1 
    while i < N: 
     if i % k == 0: 
      n.remove(n[i-1]) 
      N = len(n) + 1 
      # or simply 
      # N -= 1 
     i += 1 
    return (n) 
print (extractEachKth([1,2,3,4,5,6,7,8,9,10],3))