如何通过递归将内容添加到列表中?

我有这个代码:

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]>0True,那么int(True) == 1你的切片A[:1]

  • 如果A[0]>0False,那么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 []


以上是如何通过递归将内容添加到列表中?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>