如何通过递归将内容添加到列表中?
我有这个代码:
def positive(A):
if len(A)==0:
return 0
else:
if A[0]>0:
return A [0]+positive(A[1:])
else:
return positive(A[1:])
理论上,当我输入一个数字列表时,它会返回正数列表。例如,当我通过时[2,5,-3,-5,2,-6]它会返回[2,5,2]. 但是在我的代码中,发生的情况是评估了正值,因此返回9. 我认为我的问题是A [0]+positive(A[1:])一致的,但我不知道如何改变它。任何帮助表示赞赏。
回答
您的代码应该list为每种情况返回一个,
-
所以对于空列表情况做
return []并if not A测试空列表 -
用于
A[:1]获取一个元素的列表,而不是A[0]其中一个int([A[0]]也一样) -
简化了一点
else,如果前面的分支确实需要它们,则不需要它们return
def positive(A):
if not A:
return []
if A[0] > 0:
return A[:1] + positive(A[1:])
return positive(A[1:])
评论中的一个好主意是直接使用布尔条件作为要切片的索引
-
如果
A[0]>0是True,那么int(True) == 1你的切片A[:1] -
如果
A[0]>0是False,那么int(False) == 0你的切片A[:0]是空的
def positive(A):
if not A:
return []
return A[:int(A[0] > 0)] + positive(A[1:])
带内联 if
def positive(A):
return A[:int(A[0] > 0)] + positive(A[1:]) if A else []