使用Python中的自定义方法填充矩阵体时,从两个列表中创建矩阵[关闭]

问题描述 投票:-6回答:2

我有两个列表,我想用它来制作2D矩阵。我想基于两个列表的组合调用自定义方法来填充矩阵的主体。

我该怎么做?

假设我有一个[A,B,C]和[1,2,3]列表。我想要的结果是:

  A B C
1 x
2
3

其中x是my_method(A,1)的返回值。

谢谢。

python python-3.x
2个回答
0
投票

我们有:

xs = ["A", "B", "C"]
ys = [1, 2, 3]

让我们举一个简单的例子:f重复y次char charzxswpoi

x

矩阵的计算是显而易见的:对于每个f=lambda x,y:x*y ,我们计算一行yf(x,y)中的所有x

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)。要获取矩阵的列,我们只需压缩每一行:yszip(*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是行的标签。我们用新的yzip获取标签和行。我们有行,我们用列的宽度(另一个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


0
投票

试试这个:

Try it online!
© www.soinside.com 2019 - 2024. All rights reserved.