Comment puis-je parcourir toutes les valeurs d'une liste à l'aide de la récursivité? [dupliquer]
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:])
Si j'ai une liste, [1, 3, 152, 100, 200]. Je veux parcourir toutes les valeurs et renvoyer toutes les valeurs supérieures à 100. Mais jusqu'à présent, cette fonction ne renvoie que 152, qui est la première valeur supérieure à 100, mais elle n'itère pas le reste. Comment pourrais-je parcourir le reste de la liste, puis la renvoyer sous forme de liste? Donc [152, 100, 200].
Réponses
Vous devez toujours appeler la récursivité même si le premier élément répond à votre condition:
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]
Pour ce genre d'exercices, un générateur est parfois plus clair:
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]))
Essayez ceci, il vous manque un appel récursif:
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]))
La récursivité n'est pas vraiment le moyen de le faire, ne pouvez-vous pas simplement [x for x in number_list if x > 100]
Le moyen le plus simple serait simplement d'itérer:
def iteration_list(number_list):
over_hundred = []
for i in number_list:
if i > 100:
over_hundred.append(i)
return over_hundred
Cela renverrait [152, 200] car 100 n'est pas plus grand que 100.
La meilleure option est d'exécuter votre tableau de valeurs (par exemple [1, 3, 152, 100, 200]) en utilisant le contrôleur '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]