Comment puis-je parcourir toutes les valeurs d'une liste à l'aide de la récursivité? [dupliquer]

Nov 22 2020
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

2 MarkM Nov 22 2020 at 09:21

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]))
WasifHasan Nov 22 2020 at 09:22

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]

JoshC Nov 22 2020 at 09:27

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.

Toykato Nov 22 2020 at 09:33

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]