Ich bin in einem Online-Kurs bei edx Python und ich muss dieses kleine Programm tun, ich denke, dass die Funktion richtig ist, aber es hat den Fehler, wenn ein Element aus der Liste plötzlich gelöscht wird nächstes Element wird nicht in den Test einbezogen.Seltsames Verhalten der Python-Funktion
def f(i):
return i + 2
def g(i):
return i > 5
def applyF_filterG(L, f, g):
"""
Assumes L is a list of integers
Assume functions f and g are defined for you.
f takes in an integer, applies a function, returns another integer
g takes in an integer, applies a Boolean function,
returns either True or False
Mutates L such that, for each element i originally in L, L contains
i if g(f(i)) returns True, and no other elements
Returns the largest element in the mutated L or -1 if the list is empty
"""
# Your code here
i = 0
if len(L) == 0:
return -1
while i < len(L):
if not g(f(L[i])):
del L[i]
i += 1
return max(L)
Wenn ich mit diesem Beispiel L versuchen = [0, -10, 5, 6, -4, -2], sollte der Wert von L L = [5,6], aber das Ergebnis ist diese [-10, 5, 6, -2] das Element -10 wird übersprungen, wenn die 0 gelöscht wurde und dasselbe passiert mit -4 und -2. Bitte helfen Sie mir, ich weiß nicht, wie das gelöst werden kann.
Lange Rede kurzer Sinn: Sie wollen nie eine Liste mutieren, während Sie darüber iterieren. – elethan
Wenn Sie Elemente während der Iteration über eine Liste löschen möchten (obwohl dies in der Regel keine gute Idee ist), ist der beste Weg, mit dem größten Index zu beginnen und mit dem kleinsten zu arbeiten. Wenn ein Element gelöscht wird, ändert seine Löschung keine der Indizes der Elemente, die Sie noch besuchen müssen. –