python - 在 python 中打印格式化列表和索引值的优雅方法?

标签 python numpy formatting pretty-print

虽然有一些问题和答案与我正在寻找的内容很接近,但我想知道是否没有更优雅的解决方案来解决这个特定问题:我有一个 numpy(2D)数组并且想要逐行打印它以及前面的行号 - 当然格式也很好。

这段代码进行打印,简单但没有格式:

import numpy as np
A = np.zeros((2,3))
for i in range(2):
    print i, A[i]

我还可以通过在每行中重新构建格式化字符串来生成格式化输出:

for i in range(2):
    print "%4i "%(i)+" ".join(["%6.2f"%(v) for v in A[i]])

虽然这有效,但我认为仅构建一次格式字符串,然后为每行“粘贴”数字可能会更具可读性,并且可能更有效(?):

NVAR=A.shape[1]
fmt = "%4i" + NVAR*"  %6.2f"
for i in range(2):
    print fmt % (i, A[i])

这会失败,因为格式化的打印需要一个包含浮点元素的元组,但 A[i] 是一个 ndarray。因此,我的问题实际上归结为“如何用整数值和一维 ndarray 形成元组?”。我确实尝试过:

    tuple( [i].extend([v for v in A[i]]) )

但这不起作用(即使 [v for v in A[i]] 工作正常,该表达式也不会产生 None)。

或者我只是在这里想太多 FORTRAN 了?

最佳答案

您可以使用tuple构造函数将数组元素直接转换为元组:

for i in range(2):
    print fmt % ((i, ) + tuple(A[i]))

这里,+表示元组串联。

此外,如果您来自 FORTRAN,您可能还不知道 enumerate ,这对于这种类型的循环操作非常方便:

for i, a in enumerate(A):
    print fmt % ((i, ) + tuple(a))

您可以将其与 itertools.chain 结合起来展平枚举中的对:

import itertools

for i, a in enumerate(A):
    print fmt % tuple(itertools.chain((i, ), a))

对于您在这里尝试做的事情来说,这些可能都太过分了,但我只是想展示更多的方法。

关于python - 在 python 中打印格式化列表和索引值的优雅方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18677429/

相关文章:

python - docker 无法构建 scipy

python - 如何使用 google sites python API 更新附件内容?

python - 以元组为参数的新样式格式

c# - 如何将 Visual Studio 设置为使用 K&R 样式包围?

python - 使用 Python 使用变量调用字典时遇到问题

Python Pandas .cut

python - 在用 python 生成的图形中添加一些数字

python - Sklearn NN 回归 出勤预测

python - 使用 Cython 在 numpy 网格上评估 C 函数

bash - 如何在 bash 中打印一些文本并用空格填充到一定宽度?