我不知道如何将这个矩阵格式化为文本

2024-04-19 19:59:30 发布

您现在位置:Python中文网/ 问答频道 /正文

例如:

first = [['1 1 1', '1 1 1', '1 1 1']
t = [' '.join([str(int(num)) for num in row]) for row in first]
print('\n'.join(t))

输出:

1 1 1
1 1 1
1 1 1

到目前为止还不错。。但是

我有这个:

data = [['2 2 2', '2 2 2', '2 2 2'], 
        ['3 3 3', '3 3 3', '3 3 3'], 
        ['4 4 4', '4 4 4', '4 4 4'], 
        ['5 5 5', '5 5 5', '5 5 5']]

我想把它打印成

2 2 2   3 3 3   4 4 4   5 5 5
2 2 2   3 3 3   4 4 4   5 5 5
2 2 2   3 3 3   4 4 4   5 5 5

但是更多的维度我不知道怎么做,谢谢你的时间


解决方案:

data = [['2 2 2', '2 2 2', '2 2 2'], 
        ['3 3 3', '3 3 3', '3 3 3'], 
        ['4 4 4', '4 4 4', '4 4 4'], 
        ['5 5 5', '5 5 5', '5 5 5']]
print('\n'.join("   ".join([num for num in row]) for row in zip(*data)))

输出:

2 2 2   3 3 3   4 4 4   5 5 5
2 2 2   3 3 3   4 4 4   5 5 5
2 2 2   3 3 3   4 4 4   5 5 5

感谢@Thierrylahuille的zip提及


Tags: infordata时间zip解决方案numint
3条回答

下面是一个我认为很容易理解的可能解决方案:

#!/usr/bin/python3

data = [['2 2 2', '2 2 2', '2 2 2'],
        ['3 3 3', '3 3 3', '3 3 3'],
        ['4 4 4', '4 4 4', '4 4 4'],
        ['5 5 5', '5 5 5', '5 5 5']]

for c in range(0, len(data[0])):
    print("  ".join(row[c] for row in data))

输出:

2 2 2  3 3 3  4 4 4  5 5 5
2 2 2  3 3 3  4 4 4  5 5 5
2 2 2  3 3 3  4 4 4  5 5 5

不需要任何(显式)循环,zipmapjoin就足够了:

print('\n'.join(map('   '.join, zip(*data))))

输出:

2 2 2   3 3 3   4 4 4   5 5 5
2 2 2   3 3 3   4 4 4   5 5 5
2 2 2   3 3 3   4 4 4   5 5 5

解释zip(*data)转换数据,map+' '.join生成行,'\n'.join将行组合成准备print的最终文本

算法:
  • 打印由制表符分隔的每行的第0个索引
  • 打印由制表符分隔的每行的第一个索引

……等等

代码:
data = [['2 2 2', '2 2 2', '2 2 2'], 
        ['3 3 3', '3 3 3', '3 3 3'], 
        ['4 4 4', '4 4 4', '4 4 4'], 
        ['5 5 5', '5 5 5', '5 5 5']]
for i in range(len(data[0])):
    print("\t".join([data[j][i] for j in range(len(data))]))
输出:
2 2 2   3 3 3   4 4 4   5 5 5
2 2 2   3 3 3   4 4 4   5 5 5
2 2 2   3 3 3   4 4 4   5 5 5

相关问题 更多 >