【问题标题】:recursive calling to print list of numbers递归调用以打印数字列表
【发布时间】:2022-01-18 22:08:22
【问题描述】:

我正在尝试对数组进行排序并递归打印输出,直到数组 = [0,0,0,0,0] 但它只打印 [3,2,1,0,0] ,,, ,,这是我写的,你能帮忙解决这个问题吗,,还在学习 答案应该是

[4 3 2 1 0 0]
[3 2 1 0 0 0]
[2 1 0 0 0 0]
[1 0 0 0 0 0]
[0 0 0 0 0 0]





numbers=[5,4,3,2,1,1]
numbers.sort()

numbers.sort(reverse=True)

print('List sorted: ', numbers)


def list_arrays(numb):
level=numbers[0]
if len(numbers)-1 < level:
    return 0
    
else:
        numbers.pop(0);
        print(numbers)
        for i in range(len(numbers)):
            numbers[i] -= 1
        
        print(numbers)
        #list_arrays(numbers)
        
        


if __name__=='__main__':
    list_arrays(numbers)

【问题讨论】:

  • 这不是递归的,而是迭代的。这是解决这个问题的更好方法,但它不是递归的。

标签: python arrays recursion


【解决方案1】:

这里有很多问题。首先,您定义了一个函数,但从未调用过该函数。这就是为什么没有打印出来的原因。

其次,您不需要“排序”紧跟“排序(反向)”。

第三,我不知道你通过检查级别来尝试什么。这似乎与您的问题无关。

第四,你要从每个数字中减去 1,但只有当数字大于 0 时才应该减去 1。

最后,你只减了一次。您需要重复它,直到所有数字都为零。

numbers=[5,4,3,2,1,1]
numbers.sort(reverse=True)

print('List sorted: ', numbers)

def list_arrays(numb):
    while any(numb):
        for i in range(len(numb)):
            if numb[i]:
                numb[i] -= 1     
        print(numb)

list_arrays(numbers)

在大多数情况下,我建议在每个循环期间创建一个新列表,而不是就地修改列表,但是对于这个简单的分配,这将起作用。

要删除零,您确实想创建一个新列表,而不是就地修改。

numbers=[5,4,3,2,1,1]
numbers.sort(reverse=True)

print('List sorted: ', numbers)

def list_arrays(numb):
    while numb:
        new = []
        for v in numb:
            if v > 1:
                new.append(v-1)
        numb = new
        print(numb)

list_arrays(numbers)

甚至:

numbers=[5,4,3,2,1,1]
numbers.sort(reverse=True)

print('List sorted: ', numbers)

def list_arrays(numb):
    while numb:
        numb = [v-1 for v in numb if v>1]
        print(numb)

list_arrays(numbers)

【讨论】:

  • 谢谢你,还有一个问题,请问有没有办法从每个列表中删除所有零?我试过 numbers.remove(0) 但它在每个数组中一直显示一个零
【解决方案2】:

在另一条评论中,您要求删除所有零。也许这就是您正在寻找的解决方案 -

def run(t):
  while(t):
    yield t
    t = [x - 1 for x in t if x > 1]
mylist = [5,4,3,2,1,1]
for t in run(mylist):
  print(t)
[5, 4, 3, 2, 1, 1]
[4, 3, 2, 1]
[3, 2, 1]
[2, 1]
[1]

或者使用 list 将所有行收集到一个数组中 -

mylist = [5,4,3,2,1,1]
print(list(run(mylist)))
[
  [5, 4, 3, 2, 1, 1],
  [4, 3, 2, 1],
  [3, 2, 1],
  [2, 1],
  [1]
]

【讨论】:

  • 是的,谢谢你
【解决方案3】:

也许这就是你想要的?

def make_all_zero_and_print(numbers):
    while numbers[0] > 0:
        print(numbers)
        for i in range(len(numbers)):
            if numbers[i] > 0:
                numbers[i] -= 1
    print(numbers)

make_all_zero_and_print([5, 4, 3, 2, 1, 1])

输出:

[5, 4, 3, 2, 1, 1]
[4, 3, 2, 1, 0, 0]
[3, 2, 1, 0, 0, 0]
[2, 1, 0, 0, 0, 0]
[1, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0]

【讨论】:

  • 谢谢,,,还有一个问题,请问有没有办法从每个列表中删除所有零?
  • 我试过 numbers.remove(0) 但它一直在每个数组中显示一个零
  • @raghadss 如果要删除零,请参阅my answer
猜你喜欢
  • 1970-01-01
  • 2016-05-07
  • 1970-01-01
  • 1970-01-01
  • 2017-06-22
  • 2016-06-23
  • 1970-01-01
  • 2014-11-27
  • 2013-11-22
相关资源
最近更新 更多