我想在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)
这是因为数组适合一行,所以print函数中的'\r'
参数工作得很好,它返回到下一次打印的行首,所以它依次打印[]
、[1.]
、[1. 1. ]
和[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'
,使它返回到整个打印的开头,而不仅仅是一行的开头?我在Jupyter notebook中使用Python 3.8.3执行此操作
发布于 2021-05-14 21:19:48
经过进一步的研究,我找到了一个解决方案。其中的关键词是"Jupyter notebook“,它让我找到了这个页面:
Overwrite previous output in 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)
https://stackoverflow.com/questions/67536824
复制相似问题