2016-07-30 13 views
-1

Ich weiß, das ist ein Thema, für das es bereits mehrere Themen gibt. Ich habe sie überprüft und verstanden, was dieser Fehler bedeutet, kann sie aber aus irgendeinem Grund nicht für meinen Code verwenden.Python: Int ist Objekt ist nicht einklagbar

Ich versuche, eine einfache Python-Funktion zu kodieren, die eine Liste von Ganzzahlen als Eingabe nimmt und die Ganzzahlen in der Liste ausgibt, die genau doppelt so viel wie die vorherige Ganzzahl in der Liste sind. Hier ist der Code Ich habe bisher:

def doubles(lst): 
     i = -1 
     for num in lst: 
      if num == num[i + 1]/2: 
       print(num) 

Jetzt weiß ich, das Problem ist, dass es versucht, diese ganze Zahl als Zeichenfolge zu drucken. Ich habe versucht, die Codes letzte Zeile zu bearbeiten, um zu sagen, dass (str (num)) und das nicht funktioniert, noch ändert meine if-Anweisung in Zeile 4. Jede Hilfe würde sehr geschätzt werden!

+0

In Ihrem Beispiel fehlt eine Inkrementoperation (von i). – pyramids

+0

Wenn Ihre Frage beantwortet wurde, können Sie die Antworten als beantwortet auswählen. – bhansa

Antwort

3
if num == num[i + 1]/2: 

sollte

if num == lst[i + 1]/2: 

auch sein, empfehle ich enumerate mit über die Liste mit Indizes zu durchlaufen, aber es gibt bessere Möglichkeiten, so etwas zu tun, wie in galaxyan's answer

0

Sie gezeigt versuche, ein Element in der Liste zu indizieren, nicht die Liste selbst. Anstatt die Elemente von iterieren, können Sie die Liste der Indizes durchlaufen:

def doubles(lst): 
    for i in range(0, len(lst) - 1): 
     if lst[i] == lst[i + 1]/2: 
      print(lst[i]) 
+0

Danke für die schnelle Hilfe Jungs. Ich habe versucht, die Indizes früher zu durchlaufen, und es kam zu einem anderen Fehler: "Index außerhalb des Bereichs auflisten". Ich habe es gerade noch einmal probiert und stoße auf das gleiche Problem. Irgendwelche Tipps zum Beheben dieses Fehlers? – Polyphase29

+0

@Mark arg, off-by-one error :-(Siehe meine bearbeitete Antwort. – Mureinik

+1

Danke! Das hat funktioniert. – Polyphase29

1

Sie aus dem zweiten Element ursprünglichen Liste und die Liste beginnen zip, dann zwei Elemente vergleichen

def doubles(lst): 
    return [ i for i,j in zip(lst,lst[1:]) if j==i*2 ] 

Beispiel:

lst = [1,2,3,5,66,2,4,5] 
print doubles(lst) 
[1, 2] 
Verwandte Themen