如何覆盖之前打印语句中已经打印出来的数组元素?

Posted

技术标签:

【中文标题】如何覆盖之前打印语句中已经打印出来的数组元素?【英文标题】:How to overwrite array elements that have already been printed out in a previous print statement? 【发布时间】:2019-09-10 23:58:51 【问题描述】:

我有一个 4x4 矩阵的二维数组。我正在以格式化的形式打印数组。 现在我想添加一个睡眠时间,比如 1 秒,然后对于数组中的两个元素(我知道索引),想用同一个打印中的值覆盖这两个元素。

我尝试添加 end = "\r" 然后更新数组元素,但这无济于事。它仍在先前的打印下方打印新数组。

print('\n'.join(['\t'.join([str(cell) for cell in row]) for row in duplicate_array]), end = "\r")
time.sleep(1)
duplicate_array[0] = 0
duplicate_array[1] = 1
print('\n'.join(['\t'.join([str(cell) for cell in row]) for row in duplicate_array]))

预期输出 -

a  a  2  3  
4  5  6  a  
8  9  10 11  
12 13 14 15  

我想先显示上面的数组,然后在 1 秒后显示,我想用相应的索引覆盖值为 'a' 的元素。我在这种情况下是 0 和 1。

1 秒后数组会变成 -

0  1  2  3
4  5  6  7
8  9  10 11
12 13 14 15

我不想覆盖整个数组,只覆盖 0 和 1 处的元素。这样用户只会看到这些元素发生变化,而不是整个数组。

使用我拥有的代码的实际输出 -

a   a   2   3
4   5   6   7
8   9   10  11
a   a   2   34  15
4   5   6   7
8   9   10  11
12  13  14  15

【问题讨论】:

\r 将允许您覆盖一行,但要重新打印多行,您需要更复杂的东西,例如 curses 库。 另见this答案 【参考方案1】:

如果您不想使用第三方库,那么此代码是您的最佳实践。我在 Windows 上得到了预期的结果

import os, time


array = [['a','a' ,'2', '3'], ['4',  '5',  '6',  'a'], ['12', '13', '14', '15']]

print('\n'.join(['\t'.join([str(cell) for cell in row]) for row in array]), end = "\r")

time.sleep(2)

array[0][0] = '0'
array[0][1] = '1'
array[1][3] = '7'

os.system('cls')

print('\n'.join(['\t'.join([str(cell) for cell in row]) for row in array]), end = "\r")

input()

【讨论】:

以上是关于如何覆盖之前打印语句中已经打印出来的数组元素?的主要内容,如果未能解决你的问题,请参考以下文章

递归实现全排列算法-161029

如何打印成对矢量数组的元素?

java为啥删除数组元素时只能删第一行,其它都显示找不到,但是打印的话全部都可以出来

多次重复打印独特元素

怎么将python中的数组全部打印出来array

JAVA中数组如何打印出来