虽然有一些问题和答案与我正在寻找的内容很接近,但我想知道是否没有更优雅的解决方案来解决这个特定问题:我有一个 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/