Python 递归中的列表追加

Python 递归中的列表追加,python,list,recursion,append,Python,List,Recursion,Append,我不会做帕斯卡三角形。我需要在递归中追加到列表元素,但我的工作结果是在列表中追加列表。你能帮我做吗? 我的测试代码是: def list(row): if(row is 0): return 0 return [row, list(row-1)] 如果我使用它,我将返回列表中的列表。我需要列表中的元素 print(list(10)) 输出: [10, [9, [8, [7, [6, [5, [4, [3, [2, [1, 0]]]]]]]]]] 预期产出:

我不会做帕斯卡三角形。我需要在递归中追加到列表元素,但我的工作结果是在列表中追加列表。你能帮我做吗? 我的测试代码是:

def list(row):
    if(row is 0):
        return 0
    return [row, list(row-1)]
如果我使用它,我将返回列表中的列表。我需要列表中的元素

print(list(10))
输出:

[10, [9, [8, [7, [6, [5, [4, [3, [2, [1, 0]]]]]]]]]]
预期产出:

[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

听起来您想将列表
[x]
与调用
list(x-1)
返回的列表连接起来。python中列表的好处在于,
+
操作符正是这样做的。如果我们将最终return语句更改为
return[x]+list(x-1)
,那么我们的方向是正确的。然后,您会注意到,当x为0时会遇到问题,因为您无法将列表添加到整数中,因此您需要将基本大小写更改为
返回[0]
。最后,如前所述,最好避免声明覆盖python内置函数的名称(
list
就是其中之一),因此让我们将函数重命名为
my_list

def my_list(row):
    if row == 0:
        return [0]
    return [row] + my_list(row-1)

这并不能让你完全理解帕斯卡三角形,但希望你走上了正确的道路。

你想要的可能是:

return [row] + list(row-1)

这将创建一个包含一个元素
行的列表,并在其顶部添加另一个列表。

关于您的特定功能,这里有一种编写方法

def foo (row):
  if row == 0:
    return [0]
  else:
    return [row] + foo (row - 1)

print(foo(10))
# [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
也许更“蟒蛇式”的写作方式是

print([10 - x for x in range (0, 11)])
# [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
关于pascal的三角形,这里有一种方法可以使用辅助助手和延续传递样式编写程序——对于那些想知道的人来说,这个选择是为了以一种简单的方式组装结果,递归调用处于尾部位置,这意味着,如果有必要,这个功能可以很容易地放在蹦床上,以确保堆栈安全

def sliding (n,xs):
  if n > len(xs):
    return []
  else:
    return [xs[0:n]] + sliding(n, xs[1:])

def pascal (n):
  def aux (m, prev, k):
    if n == m:
      return k([prev])
    else:
      return aux(m + 1, [1] + [x + y for (x,y) in sliding(2, prev)] + [1], lambda rest: k([prev] + rest))
  return aux(1, [1], lambda x: x)

for line in pascal(5):
  print(line)
# [1]
# [1, 1]
# [1, 2, 1]
# [1, 3, 3, 1]
# [1, 4, 6, 4, 1]

您可以创建一个递归范围函数,以输出预期结果:

def rec_range(n):
    return [n] + rec_range(n-1) if n else [0]
>>> rec_range(10)
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
希望能有帮助

或者只需使用python2.x中的
range
xrange
):


您可以使用给定的方法创建Pascal三角形

def pascal(rows):
    for i in range (rows):
    value=1
    List = [value]
    for j in range (i):
        value = value * ( i-j ) * 1 / ( j + 1 )
        List.append(int(value))
    print(List)

pascal(5)
# [1]
# [1, 1]
# [1, 2, 1]
# [1, 3, 3, 1]
# [1, 4, 6, 4, 1]

应该使用递归。
list
在python中是一个保留字,请为您的函数使用不同的名称。您可以提供输入和预期的输出吗?它不会改变任何内容。@Szabolcs是的,我已经编辑过alreadyThank了。非常有用,谢谢。这个答案也很有帮助。应该使用递归。这是一项任务。
def pascal(rows):
    for i in range (rows):
    value=1
    List = [value]
    for j in range (i):
        value = value * ( i-j ) * 1 / ( j + 1 )
        List.append(int(value))
    print(List)

pascal(5)
# [1]
# [1, 1]
# [1, 2, 1]
# [1, 3, 3, 1]
# [1, 4, 6, 4, 1]