2017-11-11 4 views
0

Hey Ich überprüfe für eine Prüfung, die ich am Dienstag für eine Python-Klasse habe und ich versuche, ein Programm zu machen, das 2 Listen überprüft, um zu sehen, ob sie beide die gleichen Elemente/Werte haben, nur in anderer Reihenfolge. DieseWarum funktioniert mein Vergleichsprogramm nicht?

ist das, was ich bisher:

def reOrder(list1, list2): 
    if len(list1) != len(list2): 
     return False 
    for element1 in list1: 
     foundElement = False 
     for element2 in list2: 
      if element1 == element2: 
       foundElement = True 
     if foundElement == False: 
      return False 
     else: 
      return True 


print(reOrder([1,7,10,8,4,2], [3,1,8,10,2,4])) 

Aus irgendeinem Grund ist es nach wie vor auf der obigen Aussage wahr druckt. Irgendwelche Ideen, wie ich das beheben könnte?

+2

Sie sollten nicht wahr zurück, bis Sie alle Elemente von list1 geprüft haben – Himanshu

+1

Sie uncoditionally zurückkehren 'true' oder' false' in der ersten Iteration der äußeren Schleife. Nehmen Sie sich etwas Zeit, um zu lernen, wie Sie einen Debugger verwenden, um durch Ihren Code zu gehen, da dies es noch offensichtlicher machen würde als durch einfaches Lesen des Codes. –

+0

gut das ist, weil es auf den ersten Wert '1' selbst zurückgibt die Funktion nicht vollständig entfernen Sie die Rückgabe True und fügen Sie es zuletzt –

Antwort

0

Ich denke, das es in den OPs tun würde, schreiben wir den Wert True weil in der Liste zurückzukehren vergleichen 1 sowohl in der Liste und überprüft, bestätigen seine Wahrheit und return True es nicht um den nächsten Wert 7 und so weiter überprüft und die Funktion wird auch weiterhin nicht den Rest des Listenelement ausgeführt werden, da der return True Aussage so, dass das Entfernen und am Ende der beiden Schleifen platziert wird sichergestellt, dass die nach der alle Bedingungen Überprüfung True Fall als Ergebnis zurückgegeben wird

def reOrder(list1, list2): 
    if len(list1) != len(list2): 
     return False 
    for element1 in list1: 
     foundElement = False 
     for element2 in list2: 
      if element1 ==element2: 
       foundElement=True 
     if foundElement ==False: 
      return False  
    return True 
print(reOrder([1,3,10,8,4,2], [3,1,8,10,2,4])) 

AUSGABE

False 

ich würde es vorziehen, die beiden Listen sortieren und dann das entsprechende Element, wenn die Komplexität zu überprüfen, O reduzieren würde (n * log n), wie dieser Code ist eindeutig o (n2)

+0

Ich kann nicht sehen, welche Funktionalität Sie gegenüber dem Original geändert haben, und Sie haben keine Erklärung für die von Ihnen vorgenommene Änderung angegeben . – roganjosh

+0

ich entschuldige mich für die oben genannten pls überprüfen Sie erneut –

+0

Dank dieser endete arbeiten –

0

Die Grundidee ist, dass, wenn die zwei Listen haben die gleichen Elemente, dann sollten alle Elemente der zweiten Liste in der ersten Liste sein und umgekehrt. Wenn nur ein Element in list2 nicht in list1 ist, dann sind die beiden Listen nicht identisch.

def reOrder(list1,list2): 
Found = False 
if len(list1)!=len(list2): 
    return False 
for e in list2: 
    if e not in list1: 
     return False 
return True  
print(reOrder([1,7,10,8,4,2], [3,1,8,10,2,4]))