Wie kann ich alle Werte in einer Liste mithilfe der Rekursion durchlaufen? [Duplikat]
def recursion_list(number_list):
if number_list == []:
return []
if number_list[0] > 100:
return number_list[0]
else:
return recursion_list(number_list[1:])
Wenn ich eine Liste habe, [1, 3, 152, 100, 200]. Ich möchte alle Werte durchlaufen und alle Werte zurückgeben, die über 100 liegen. Bisher gibt diese Funktion jedoch nur 152 zurück. Dies ist der erste Wert, der über 100 liegt, aber der Rest wird nicht durchlaufen. Wie würde ich den Rest der Liste durchlaufen und sie dann als Liste zurückgeben? Also [152, 100, 200].
Antworten
Sie müssen die Rekursion auch dann aufrufen, wenn das erste Element Ihre Bedingung erfüllt:
def recursion_list(number_list):
if not number_list:
return number_list
if number_list[0] > 100:
return [number_list[0]] + recursion_list(number_list[1:])
else:
return recursion_list(number_list[1:])
recursion_list([1, 3, 152, 100, 200])
# [152, 200]
Für diese Art von Übungen ist ein Generator manchmal klarer:
def recursion_list(number_list):
if not number_list:
return
first, *rest = number_list
if first > 100:
yield first
yield from recursion_list(rest)
list(recursion_list([1, 3, 152, 100, 200]))
Versuchen Sie dies, Sie verpassen einen rekursiven Aufruf:
def recursion_list(number_list):
if not number_list:
return []
if number_list[0] > 100:
return [number_list[0]] + recursion_list(number_list[1:])
else:
return recursion_list(number_list[1:])
print(recursion_list([102,23,12,205]))
Rekursion ist nicht definitiv der richtige Weg, nicht wahr? [x for x in number_list if x > 100]
Der einfachste Weg wäre nur die Iteration:
def iteration_list(number_list):
over_hundred = []
for i in number_list:
if i > 100:
over_hundred.append(i)
return over_hundred
Dies würde [152, 200] zurückgeben, da 100 nicht größer als 100 ist.
Die bessere Option besteht darin, Ihr Wertearray (z. B. [1, 3, 152, 100, 200]) mit dem Controller 'for' auszuführen.
def recursion_list(number_list):
sorted_list = []
for value in number_list:
if number_list == []:
return number_list
if value > 100: # Considere using >= to integrate 100 in your array
sorted_list.append(value)
return sorted_list
# Will give you [152, 200]