2016-10-24 4 views
1

Ich soll alle in info gefundenen Ebenensätze entfernen und sie an das zweite Argument, house anhängen. Ein Verweis auf die Liste, die irgendwelche Evens erhalten hat, muss zurückgegeben werden. Wenn kein zweites Argument angegeben wird, sollte eine Liste aller umgelagerten Evens erstellt und zurückgegeben werden.Verschieben Sie alle die gleichen

Dies ist mein Code so weit.

def relocate_even(info,house): 
    house=[] 
    new_list=[] 
    for x in info: 
     if x%2==0: 
      info.remove(x) 
      if len(house)>0: 
       house.append(x) 
       return house 
      if len(house)<=0: 
       new_list.append(x) 
       return new_list  

Ich habe Probleme mit, wenn die Hausfunktion leer ist. Ich habe Code dafür geschrieben, aber es gibt mir einen Fehler.

+0

'Haus' ist keine Funktion, es ist eine Liste. Und es ist immer leer in Ihrem Code, wie Sie nie etwas darin setzen – UnholySheep

+0

'Haus' ist eine Liste. Listen dürfen nicht kürzer als null sein. 'len (Haus) <0 'wird niemals zu' Wahr 'ausgewertet. Warum gibst du 'house' in deine Funktion in der Argumentliste und setzt dann 'house' gleich einer leeren Liste? Jeder Inhalt, den "Haus" hatte, bevor Sie Ihre Funktion eingegeben haben, wird verloren gehen nach Haus = [] ' –

Antwort

0

Ändern Sie keine Iterables, während Sie über sie iterieren. Das heißt, ändern Sie nicht info in einem for x in info: Block. Erstellen Sie stattdessen eine neue Liste und legen Sie dann die Informationen gleich fest. Sie können einem Argument einen Standardwert zuweisen, der es ermöglicht, dass Aufrufe diesen Wert nicht explizit festlegen.

def relocate_even(info, house=None): 
    new_house = [] 
    new_info = [] 
    for x in info: 
     if x%2: 
      new_info.append(x) 
     else: 
      new_house.append(x) 
    info[:] = new_info 
    if house is None: 
     return new_house 
    else: 
     house[:] = house + new_house 
     return house 
+0

ok, das macht so viel Sinn! Wenn ich die geraden Zahlen in der Info entfernen wollte, könnte ich das tun, bevor ich mich an new_info anschließe? – rem

+0

'ix x% 2' ist im Grunde das gleiche wie' wenn x% 2! = 0'. Also werden alle ungeraden Zahlen an 'new_info' und alle anderen an' new_house' angehängt. Dann ersetzen wir den Inhalt von 'info' durch den Inhalt von' new_info'. Es gibt also keinen Grund, vor dem Erstellen der beiden Ergebnislisten etwas mit "Info" zu tun –

Verwandte Themen