Python 如何递归地附加到空列表?
我不熟悉递归,觉得它很难掌握。如果我不能直接“触摸”空数组,我就不知道如何附加它。如果它是一个字符串,我会每次添加值。如果它是一个涉及乘法的数字,我每次都可以将它相乘,但是对于一个数组,我不知道该怎么做 我不知道如何附加到一个空数组,而不能够直接“触摸”它 这就是我到目前为止所做的:Python 如何递归地附加到空列表?,python,recursion,computer-science,Python,Recursion,Computer Science,我不熟悉递归,觉得它很难掌握。如果我不能直接“触摸”空数组,我就不知道如何附加它。如果它是一个字符串,我会每次添加值。如果它是一个涉及乘法的数字,我每次都可以将它相乘,但是对于一个数组,我不知道该怎么做 我不知道如何附加到一个空数组,而不能够直接“触摸”它 这就是我到目前为止所做的: def laugh(num): if num == 0: return [] # This doesnt work since we can't append a function call. I'
def laugh(num):
if num == 0:
return []
# This doesnt work since we can't append a function call. I'm unsure what to do.
return laugh(num - 1).append("ha ")
打印(笑(3))->[“哈哈哈”]
如果我可以返回一串“Ha”,那么我就可以很容易地做到这一点。我可以返回一个空字符串,只需为每个步骤添加一个“Ha”。在本例中,通过调用append对列表进行修改。您要做的是返回一个新的列表:
def laugh(num):
# base case
if num == 0:
return []
# recursive case
return ["ha"] + laugh(num-1)
在这种情况下,通过调用append对列表进行修改。您要做的是返回一个新的列表:
def laugh(num):
# base case
if num == 0:
return []
# recursive case
return ["ha"] + laugh(num-1)
您可以修改它,如下所示:
def laugh(num):
if num == 0:
return []
haha = laugh(num-1)
haha.append("ha")
return haha
由于append
不会返回修改后的列表,因此必须分两步执行。使用串联和三元运算符,可以将其缩小为:
def laugh(num):
return laugh(num-1) + ["ha"] if num else []
您可以修改它,如下所示:
def laugh(num):
if num == 0:
return []
haha = laugh(num-1)
haha.append("ha")
return haha
由于append
不会返回修改后的列表,因此必须分两步执行。使用串联和三元运算符,可以将其缩小为:
def laugh(num):
return laugh(num-1) + ["ha"] if num else []
append
不返回新对象,而是修改现有对象。因此return laugh.append()
只是None
您可以返回laugh(num-1)+[“ha”]
append
不返回新对象,而是修改现有对象。所以return laugh.append()
只是None
你可以返回laugh(num-1)+[“ha”]
你能解释一下我为什么返回一个新列表吗?我有点困惑?因为基本情况将返回[],下一步将变成[]+[“ha”]。编辑-哦,我想用python你可以将列表添加到另一个列表中进行附加?!所以它不同于将一个列表附加到另一个列表,因为这是变异。它正在创建一个新的列表,这是将两个列表合并而没有任何变异的结果。这类似于lisp或基于lambda演算的语言中的(cons…empty)。您能解释一下我为什么返回一个新列表吗?我有点困惑?因为基本情况将返回[],下一步将变成[]+[“ha”]。编辑-哦,我想用python你可以将列表添加到另一个列表中进行附加?!所以它不同于将一个列表附加到另一个列表,因为这是变异。它正在创建一个新的列表,这是将两个列表合并而没有任何变异的结果。这类似于lisp或基于lambda演算的语言中的(cons…empty)。