재귀를 사용하여 목록의 모든 값을 어떻게 반복 할 수 있습니까? [복제]

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

목록이 있으면 [1, 3, 152, 100, 200]. 모든 값을 반복하고 100을 초과하는 모든 값을 반환하고 싶습니다.하지만 지금까지이 함수는 100을 초과하는 첫 번째 값인 152 만 반환하지만 나머지는 반복하지 않습니다. 나머지 목록을 어떻게 반복 한 다음 목록으로 반환합니까? 그래서 [152, 100, 200].

답변

2 MarkM Nov 22 2020 at 09:21

첫 번째 요소가 조건을 충족하더라도 여전히 재귀를 호출해야합니다.

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]

이러한 종류의 연습에서는 생성기가 때때로 더 명확합니다.

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

이것을 시도하면 재귀 호출이 누락되었습니다.

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

재귀는 확실히이 작업을 수행하는 방법이 아닙니다. [x for x in number_list if x > 100]

JoshC Nov 22 2020 at 09:27

가장 쉬운 방법은 반복하는 것입니다.

def iteration_list(number_list):
    over_hundred = []
    for i in number_list:
        if i > 100:
            over_hundred.append(i)
    return over_hundred

100은 100보다 크지 않기 때문에 [152, 200]을 반환합니다.

Toykato Nov 22 2020 at 09:33

더 나은 옵션은 'for'컨트롤러를 사용하여 값 배열 (예 : [1, 3, 152, 100, 200])을 던지는 것입니다.

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]