【问题标题】:Update print output from beginning of text in python从python中文本的开头更新打印输出
【发布时间】:2021-08-04 18:36:50
【问题描述】:

我想在 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' 参数可以正常工作,它会返回到下一次打印的行首,所以它打印[] 然后打印[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',以便它回到整个打印的开头,而不仅仅是行的开头?我正在使用 Python 3.8.3 在 Jupyter 笔记本中执行此操作

【问题讨论】:

  • 清屏? os.system('cls') 在 Windows 上,否则 os.system('clear')
  • @JustinEzequiel 似乎不起作用,如上所述发生了同样的事情。我正在使用 Jupyter notebook 以防万一发生变化。
  • 这能回答你的问题吗? Rewrite multiple lines in the console
  • “我正在使用 Jupyter 笔记本”——你应该在一开始就提到这一点。
  • @Seb 没有,但是这个是stackoverflow.com/questions/38540395/…

标签: python arrays string output


【解决方案1】:

经过更多研究,我找到了解决方案。这里的关键词是“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)

【讨论】:

    猜你喜欢
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    相关资源
    最近更新 更多