Jak mogę iterować przez wszystkie wartości na liście przy użyciu rekursji? [duplikować]

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

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

2 MarkM Nov 22 2020 at 09:21

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

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]

JoshC Nov 22 2020 at 09:27

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.

Toykato Nov 22 2020 at 09:33

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]