재귀를 사용하여 목록의 모든 값을 어떻게 반복 할 수 있습니까? [복제]
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]