我有两个列表,我想用它们来制作 2D 矩阵。我想根据两个列表的组合调用自定义方法来填充矩阵的主体。
我该怎么做?
假设我有一个 [A, B, C] 和 [1, 2, 3] 的列表。我想要的结果是:
A B C
1 x
2
3
其中 x 是 my_method(A,1) 的返回值。
谢谢你。
我们有:
xs = ["A", "B", "C"]
ys = [1, 2, 3]
让我们举一个简单的例子:f
重复y
时间字符x
f=lambda x,y:x*y
矩阵的计算是显而易见的:对于每个y
,我们计算一行f(x,y)
with all x
in xs
。
matrix = [[f(x,y) for x in xs] for y in ys]
print ("matrix", matrix)
矩阵的显示更有趣。首先,我们需要计算每列的宽度。列的宽度是其最宽元素的宽度。如果col
是列,则宽度为max(len(str(z)) for z in col)
。第一列是ys
. 要获得矩阵的列,我们只需压缩每一行:zip(*matrix)
与zip(row[0], row[1], ...)
ws = [max(len(str(y)) for y in ys)] + [max(len(str(y)) for y in col) for col in zip(*matrix)]
print ("ws", ws)
现在,我们可以打印矩阵。第一行是[" "]+xs
,以下行是[y]+row
其中y
是该行的标签。我们使用新的zip
:获取标签和行zip(ys, matrix)
。我们有我们的行,我们用列的宽度(另一个zip
!zip(zs, ws)
)压缩值以调整(ljust
)列。该选项卡分隔列:
for zs in ([" "]+xs, *[[y]+row for y, row in zip(ys, matrix)]):
print ("\t".join([str(z).ljust(w) for z,w in zip(zs, ws)]))
输出:
A B C
1 A B C
2 AA BB CC
3 AAA BBB CCC
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句