Wie kann ich alle Werte in einer Liste mithilfe der Rekursion durchlaufen? [Duplikat]

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:])

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

2 MarkM Nov 22 2020 at 09:21

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

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]

JoshC Nov 22 2020 at 09:27

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.

Toykato Nov 22 2020 at 09:33

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]