2017-12-19 2 views
0

Im Moment mache ich eine Übung mit einer Liste, die der Benutzer macht, die sich mit String-Werten füllt. Die Liste wird erstellt und enthält eine Länge von 5 verschiedenen Werten. Dies war der Code, der die oben beschriebene Liste erstellt.Warum entfernt die von diesem Skript erstellte for-Schleife alle Elemente anstelle der angegebenen Indizes?

make_list = [] 

for x in range(5): 
    x = input('Please give me some random words: ') 

Nach Worten, was ich möchte für meinen Python-Skript tun, ist die 0., 4. entfernen und fünften Elemente in dieser Liste. Sobald ich fertig bin, sind nur noch zwei Wörter aus dieser Liste übrig. Hier ist der Teil des Codes, den ich erstellt habe.

def new_list(alist): 
    for x in range(len(alist)): 
     if x == 0 or x == 3 or x == 4: 
      alist.pop(x) 

    return alist 

Dann habe ich die Funktion mithilfe der oben erstellten Liste aufgerufen.

print(new_list([make_list])) 

Was ich immer am Ende auf pycharm bin, ist nur eine leere Liste angezeigt. []

Was genau fehlt mir in dem ganzen Skript geschrieben unten, das verursacht diese ganze Sache zu Pop/Entfernen Sie alle der Liste statt der angegebenen Indizes.

make_list = [] 

for x in range(5): 
    x = input('Please give me some random words: ') 

def new_list(alist): 
    for x in range(len(alist)): 
     if x == 0 or x == 3 or x == 4: 
      alist.pop(x) 

    return alist 

print(new_list([make_list])) 

EDIT

noch immer, dass leere Liste, was auf geht. Hier ist der aktualisierte Code, den ich eingegeben habe.

make_list = [] 

for x in range(5): 
    x = input('Please give me some random words: ') 
    make_list.append(x) 

def new_list(alist): 
    for x in range(len(alist)): 
     if alist.index(alist[x]) == 0 or alist.index(alist[x]) == 3 or alist.index(alist[x]) == 4: 
      alist.remove(alist[x]) 

    return alist 

print(new_list([make_list])) 
+1

Untersuchen Sie 'Alist' in' new_list'. Sie übergeben es eine Liste mit 'make_list'. Sie möchten 'new_list (make_list)' oder 'new_list (list (make_list))' '.Sie haben auch ein Problem mit Ihrer Schleife in 'new_list'. Sehen Sie, ob Sie herausfinden können, was es ist, nachdem Sie dieses erste Ding repariert haben. – Galen

+1

Ich habe meine Antwort gelöscht, weil diese Frage viel zu weit gefasst ist. Es gibt mehrere Probleme mit dem Code, die verhindern, dass er funktioniert. Sie müssen die Frage eingrenzen. – Carcigenicate

+0

Entfernen Sie die eckigen Klammern in Ihrer Druckanweisung in der letzten Zeile, und Sie erhalten den Listenindex außerhalb des Bereichs, der auftritt, wenn Sie Elemente aus einer Liste entfernen, wenn Sie auf diese Weise iterieren. – 22degrees

Antwort

1

Dies ist eine mögliche Lösung, die eine andere Liste für die Ausgabe erstellt.

make_list = [] 

for x in range(5): 
    make_list.append(input('Please give me some random words: ')) 

def new_list(alist): 
    out_list = [] 
    for i, x in enumerate(alist): 
     if i not in [0, 3, 4]: 
      out_list.append(x) 

    return out_list 

print(new_list(make_list)) 

enter image description here

Wahrscheinlich ist die Tatsache, dass Sie eine leere Liste erhalten ist, dass als ‚alist‘ die Indizes verkürzt Punkte auf verschiedene Einträge von denen, die man erwarten würde. Eine einfache Lösung für Probleme wie diese besteht darin, eine weitere Liste zu erstellen und die Eingabeliste während der Iteration unverändert zu belassen. Dies sollte auch für Dicts und andere Mutables gelten.

0

Was Sie vermissen ist, dass Sie die Funktion mit Ihrer Liste als das einzige Element innerhalb einer anderen Liste aufrufen.

print(new_list([make_list])) 

Diese andere Liste ist, was Sie zurück bekommen. Lustigerweise haben Sie diesen Fehler nach dem Editieren erneut gemacht.

Nachdem Sie diesen dummen Fehler behoben haben, werden Sie auf einen anderen stoßen. Dieser hat mit der Größe der Liste im Vergleich zu den Indizes zu tun, die Sie entfernen möchten. Denken Sie an sich, "Was ist Index 4, nachdem ich nur noch 3 Artikel in meiner Liste habe?"

Um dies zu beheben, müssen Sie Ihren Ansatz alle zusammen überdenken - nur mit den Indizes wird es nicht schneiden nicht mehr.

Eigentlich ist die other answer unter mir (von Diego Sacconi) eine gute Möglichkeit, dies zu lösen.

Verwandte Themen