Jak mogę iterować przez wszystkie wartości na liście przy użyciu rekursji? [duplikować]
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:])
Jeśli mam listę, [1, 3, 152, 100, 200]. Chcę wykonać iterację wszystkich wartości i zwrócić wszystkie wartości powyżej 100. Ale jak dotąd ta funkcja zwraca tylko 152, czyli pierwszą wartość powyżej 100, ale nie wykonuje iteracji przez resztę. Jak powtórzyć pozostałą część listy, a następnie zwrócić ją jako listę? Więc [152, 100, 200].
Odpowiedzi
Nadal musisz wywołać rekursję, nawet jeśli pierwszy element spełnia twój warunek:
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]
W przypadku tego rodzaju ćwiczeń generator jest czasami bardziej przejrzysty:
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]))
Spróbuj tego, brakuje ci wywołania rekurencyjnego:
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]))
Rekurencja nie jest zdecydowanie sposobem na zrobienie tego, prawda? [x for x in number_list if x > 100]
Najłatwiej byłoby po prostu z iteracją:
def iteration_list(number_list):
over_hundred = []
for i in number_list:
if i > 100:
over_hundred.append(i)
return over_hundred
To zwróci [152, 200], ponieważ 100 nie jest większe niż 100.
Lepszą opcją jest uruchomienie wrzucenia tablicy wartości (np. [1, 3, 152, 100, 200]) za pomocą kontrolera „for”
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]