2016-07-10 10 views
0

Ich kann nicht herausfinden, warum meine If-else-Anweisung nicht wie erwartet ausgeführt wird. Ich habe versucht, Code zu erstellen, um eine palindromische Zeichenfolge zu testen. Meine Druckfunktionen zeigen mir, dass die umgekehrte Methode funktioniert, aber wenn ich zur Vergleichsstufe komme, kann ich nicht erreichen, dass sie True zurückgibt. HierPython Vergleichsoperator

ist der Code:

def is_palindrome(a): 
    myList = [] 

    for i in a: 
     myList.append(i) 

    print myList 
    new = myList.reverse() 
    print myList 
    print new 

    if myList == new: 
     return True 
    else: 
     return False 


print is_palindrome("radar") 

Dies ergibt Falsch. Ich habe auch versucht, die if-Anweisung auf if myList is new: zu ändern, aber leider gibt es immer noch False zurück.

Jeder Einblick geschätzt!

Antwort

5

list.reverse() ist in-place, dh es kehrt die Liste um, in der es aufgerufen wird, gibt aber nichts zurück.

Die Zeile print new sollte None drucken, und daher wird myList == newFalse sein.

Verwenden Sie stattdessen [::-1], die nicht an Ort und Stelle ist und gibt eine neue, umgekehrt Liste, oder verwenden Sie einen einfacheren Weg, ein Palindrom, zum Beispiel zu erkennen:

def is_palindrome(iterable): 
    return iterable == iterable[::-1] 
+0

Dank. Ich verstehe das Konzept von In-Place, aber warum gibt/rettet es diese Liste nicht auf die Variable "new"? EDIT: Ich sah nur Ihre Follow-up, danke! – arumiat

+0

@arumiat Da per Definition eine Methode "in-place" ist, gibt sie nichts zurück. – DeepSpace

+0

@arumiat Da die Zeile 'new = myList.reverse()' nichts zurückgibt, hat sie nur myList geändert. Ich bin mir nicht sicher, ob du das Konzept verstehst ... – Tim