Python 如何使用递归遍历列表中的所有值?
如果我有一个列表,[1,3,152,100,200]。我希望遍历所有值,并返回所有超过100的值。但到目前为止,这个函数只返回152,这是超过100的第一个值,但它不遍历其余的值。我如何迭代列表的其余部分,然后将其作为列表返回?所以[152100200]。这里有一种方法Python 如何使用递归遍历列表中的所有值?,python,recursion,Python,Recursion,如果我有一个列表,[1,3,152,100,200]。我希望遍历所有值,并返回所有超过100的值。但到目前为止,这个函数只返回152,这是超过100的第一个值,但它不遍历其余的值。我如何迭代列表的其余部分,然后将其作为列表返回?所以[152100200]。这里有一种方法 def recursion_list(number_list): if number_list == []: return [] if number_list[0] > 100:
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:])
即使第一个元素满足您的条件,您仍然需要调用递归:
def recursion_list(number_list):
list = []
for i in (i for i in range(len(number_list)) if number_list[i] > 100):
list.append(number_list[i])
return list
对于此类练习,生成器有时更清晰:
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]))
递归不一定是做到这一点的方法,你能不能只
[x代表x,如果x>100]
最简单的方法就是迭代:
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]))
这将返回[152200],因为100不大于100。更好的选择是使用控制器“for”运行值数组(例如[1,3,152100,200])
def iteration_list(number_list):
over_hundred = []
for i in number_list:
if i > 100:
over_hundred.append(i)
return over_hundred
这个问题类似:函数应该总是返回一个列表。如果
为真,则返回什么?如果数字列表[0]>100
,考虑到数字列表[0]
只是您当前查看的值,您应该返回什么值?当然是这个,但也许还有其他的?也许是通过递归确定的?
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]