Python | Entfernen eines Wertes aus einer Liste

Erste Frage Aufrufe: 2083     Aktiv: 24.06.2020 um 07:33

1

Hi, Ich habe hier ein Programm geschrieben um einen Wert in eine Liste einfügen kann:

def wertEinfuegen(listeA, einfuegeWert):

letzterGueltigerWert = -1
for i in range(len(listeA) - 1):
    if(listeA[i] > 0):
        letzterGueltigerWert += 1
einfuegeStelle = 0
while((einfuegeWert > listeA[einfuegeStelle]) and (einfuegeStelle <= letzterGueltigerWert)):
    einfuegeStelle += 1
for i in range(letzterGueltigerWert, einfuegeStelle-1, -1): 
    listeA[i + 1] = listeA[i]
listeA[einfuegeStelle] = einfuegeWert
letzterGueltigerWert += 1
return listeA

def einlesen():

print("Welchen Wert wollen Sie in die Liste einfügen?") print()

einfuegeWert = int(input("Wert eingeben: ")) return einfuegeWert

def main(): #Hauptfunktion

listeA = [3,4,9,12,22,0,0,0,0,0]
print()
print(listeA)
einfuegeWert = einlesen()
wertEinfuegen(listeA, einfuegeWert)
print()
print(listeA)

main()

Mein Frage ist nun, kann ich wie oben einen Wert enfernen. Das nachdem ich den Wert entfernt habe, automatisch die Werte davor eingerückt werden.

Also:

[3, 4, 9, 12, 22, 0, 0, 0, 0, 0]

Welchen Wert wollen Sie aus der Liste entfernen?

Wert eingeben: 4

[3, 9, 12, 22, 0, 0, 0, 0, 0, 0]

Diese Frage melden
gefragt

Schüler, Punkte: 15

 
Kommentar schreiben
2 Antworten
1

hi manuel.py

Prinzipiell ist dies noch einfacher als dein Code oben. Folgendes musst du machen:
(Hab nicht probiert obs funktioniert, sollte aber gehen)

  1. Loop bis zu löschende Zahl kommt
  2. Wenn getroffen weiter loopen und zahlen nachrücken. if list[i] not 0 : list[i] = list[i+1] else: break
  3. Liste zurückgeben

Somit solltest du in O(n) löschen können.

Anmerkung zu oben.

  1. Schau dass du dein Code zumindest mit Doc-Strings dokumentierst. So können wir direkt sehen was der Code machen soll ohne ihn ganz lesen zu müssen. Zudem weist auch du in einem halben Jahr was du eigentlich machen wolltest.
  2. Ich würde schauen, ob du von den 3 Schleifen oben einige zusammen nehmen kannst. Ob und wieviel du dann schneller wirst kannst du mit %timeit herausfinden.
Diese Antwort melden
geantwortet

Student, Punkte: 30

 

Kommentar schreiben

1

Hallo manuel.py!

Build-in remove

du kannst auch eine build-in Funktion für Pythons Listen verwenden: a.remove(x) würde aus der Liste a das erste Vorkommen des Wert x entfernen.

Wenn du nicht die build-in Funktion remove verwenden kannst, wäre die Frage, ob du alle Werte aus der Liste oder wie remove nur den ersten Wert löschen willst.

Ohne build-in

Alle Vorkommen löschen: a = [el for el in a if el!=x] löscht alle Elemente el die den Wert x haben mittels dieser sogenannten List Comprehension, welche die Schleife und Fallunterscheidung eigentlich nur in die Liste mit reinschreibt (sehr kurz und kompakt und doch sehr gut lesbar).

Nur das erste Vorkommen löschen mit index:

i = a.index(x)findet die Position des ersten x. Danach kannst du zwei Slices von a nehmen: a = a[:i] + a[i+1:]

Nur das erste Vorkommen löschen ohne index:

Jetzt bleibt nur eine Schleife über die Liste, die Lösung hatte dir _marc schon oben beschrieben.

found = False
i =0
while not found:
    if a[i] == x:
        found = True
        i -= 1
    i += 1
while i < len(a)-1:
    a[i] = a[i+1]
    i += 1

Hier gehst du immer einen Index weiter, wenn die Zahl nicht x ist und bei x bleibst du wegen +1 - 1 stehen. Danach kopierst Du immer den nachfolgenden Wert auf die aktuelle Position.

Max

Mehr Erklärungen und Videos: maxkuelshammer.de

Diese Antwort melden
geantwortet

 

Kommentar schreiben