说我有一个看起来像的矩阵:
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
我怎样才能在单独的行上制作它:
[[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]]
然后删除逗号等:
0 0 0 0 0
并且还要将其设为空白而不是0,以便数字可以放入以后,所以最后它会像:
_ 1 2 _ 1 _ 1
(空格不是下划线)
感谢
答案 0 :(得分:4)
这为矩阵中的每个数字分配4个空格。您可能需要根据您的数据进行调整。
这也使用了Python 2.6中引入的string format method。问你是否想看看如何以旧方式去做。
matrix=[[0, 1, 2, 0, 0], [0, 1, 0, 0, 0], [20, 0, 0, 0, 1]]
for row in matrix:
data=(str(num) if num else ' ' for num in row]) # This changes 0 to a space
print(' '.join(['{0:4}'.format(elt) for elt in data]))
产量
1 2
1
20 1
答案 1 :(得分:3)
这是〜untubu答案的缩短版
M = [[0, 1, 2, 0, 0], [0, 1, 0, 0, 0], [20, 0, 0, 0, 1]]
for row in M:
print " ".join('{0:4}'.format(i or " ") for i in row)
答案 2 :(得分:1)
#!/usr/bin/env python
m = [[80, 0, 3, 20, 2], [0, 2, 101, 0, 6], [0, 72 ,0, 0, 20]]
def prettify(m):
for r in m:
print ' '.join(map(lambda e: '%4s' % e, r)).replace(" 0 ", " ")
prettify(m)
# => prints ...
# 80 3 20 2
# 2 101 6
# 72 20
答案 3 :(得分:1)
这个答案还计算了适当的字段长度,而不是猜测4:)
def pretty_print(matrix):
matrix = [[str(x) if x else "" for x in row] for row in matrix]
field_length = max(len(x) for row in matrix for x in row)
return "\n".join(" ".join("%%%ds" % field_length % x for x in row)
for row in matrix)
这里有一个迭代太多,所以如果在关键时刻你需要在单个非功能循环中进行初始str()
传递和field_length
计算。
>>> matrix=[[0, 1, 2, 0, 0], [0, 1, 0, 0, 0], [20, 1, 1, 1, 0.30314]]
>>> print pretty_print(matrix)
1 2
1
20 1 1 1 0.30314
>>> matrix=[[1, 0, 0], [0, 1, 0], [0, 0, 1]]
>>> print pretty_print(matrix)
1
1
1
答案 4 :(得分:0)
def matrix_to_string(matrix, col):
lines = []
for e in matrix:
lines.append(str(["{0:>{1}}".format(str(x), col) for x in e])[1:-1].replace(',','').replace('\'',''))
pattern = re.compile(r'\b0\b')
lines = [re.sub(pattern, ' ', e) for e in lines]
return '\n'.join(lines)
示例:
matrix = [[0,1,0,3],[1,2,3,4],[10,20,30,40]]
print(matrix_to_string(matrix, 2))
输出:
1 3
1 2 3 4
10 20 30 40
答案 5 :(得分:0)
如果您对矩阵做了很多工作,我强烈建议使用numpy(第三方包)矩阵。它具有很多与迭代相关的功能(例如,标量乘法和矩阵加法)。
http://docs.scipy.org/doc/numpy/reference/generated/numpy.matrix.html
然后,如果你想让“print”输出你的特定格式,只需继承numpy的矩阵,并将repr和str方法替换为其他人提供的一些解决方案。
class MyMatrix(numpy.matrix):
def __repr__(self):
repr = numpy.matrix.__repr__(self)
...
return pretty_repr
__str__ = __repr__