首页 > 解决方案 > 从python中文本的开头更新打印输出

问题描述

我想在 for 循环中一个接一个地打印出各种大小的 numpy 数组,但在循环的每个步骤中删除前一个打印。对于长度小于 1 行的字符串,通常建议的解决方案如下:

import numpy as np
import time

for i in range(5):
    a = np.ones(i)
    print(a,end = '\r')
    time.sleep(0.5)

这是因为数组适合一行,因此'\r'print 函数中的参数可以正常工作,它会回到下一次打印的行首,所以它会打印[]then [1.]then [1. 1. ]then[1. 1. 1.]等等。

当打印大于一行时会出现问题,并且'\r'它只是回到倒数第二行,如下所示:

for i in range(5):
    a = np.ones(shape = (i,i))
    print(a,end = '\r')
    time.sleep(0.5)

这给出了以下内容:

[[1. 1.]
[[1. 1. 1.]
 [1. 1. 1.]
[[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]

而我希望数组更新大小而不在最后一行重叠。本质上,有没有办法end = '\r'用其他东西替换,以便它回到整个打印的开头,而不仅仅是行的开头?我正在使用 Python 3.8.3 在 Jupyter 笔记本中执行此操作

标签: pythonarraysstringoutput

解决方案


经过更多研究,我找到了解决方案。其中的关键词是“Jupyter notebook”,它让我可以找到这个页面:

覆盖 jupyter notebook 中的先前输出

这个用途Ipython.display和我的问题的解决方案将写如下:

import numpy as np
import time
from IPython.display import clear_output

for i in range(5):
    clear_output(wait=True)
    a = np.ones(shape = (i,i))
    print(a)
    time.sleep(0.5)

推荐阅读