我有一个包含这些值的2D列表:
text = [[4, 3, 8, 9, 5, 1, 2, 7, 6], [8, 3, 4, 1, 5, 9, 6, 7, 2],
[6, 1, 8, 7, 5, 3, 2, 9, 4], [6, 9, 8, 7, 5, 3, 2, 1, 4],
[6, 1, 8, 7, 5, 3, 2, 1, 4], [6, 1, 3, 2, 9, 4, 8, 7, 5]]
例如,text [i]应该像这样打印:
4 3 8
9 5 1
2 7 6
但我的矩阵打印出来:
r = 6
m = []
for i in range(r):
m.append([int(x) for x in text[i]])
for i in m:
print (i)
>>
4 3 8 9 5 1 2 7 6
8 3 4 1 5 9 6 7 2
6 1 8 7 5 3 2 9 4
6 9 8 7 5 3 2 1 4
6 1 8 7 5 3 2 1 4
6 1 3 2 9 4 8 7 5
答案 0 :(得分:5)
您可以使用numpy。首先,将列表转换为numpy数组。然后,取一个元素并将其重塑为3x3矩阵。
import numpy as np
text = [[4, 3, 8, 9, 5, 1, 2, 7, 6], [8, 3, 4, 1, 5, 9, 6, 7, 2],
[6, 1, 8, 7, 5, 3, 2, 9, 4], [6, 9, 8, 7, 5, 3, 2, 1, 4],
[6, 1, 8, 7, 5, 3, 2, 1, 4], [6, 1, 3, 2, 9, 4, 8, 7, 5]]
text = np.array(text)
print text[0].reshape((3, 3))
print text[1].reshape((3, 3))
输出:
[[4 3 8]
[9 5 1]
[2 7 6]]
[[8 3 4]
[1 5 9]
[6 7 2]]
有了numpy,你真的在使用矩阵
答案 1 :(得分:2)
def print9_as_3x3(list9):
for i in 0, 3, 6:
for j in 0, 1, 2:
print(list9[i+j], end= ' ')
print()
这当然可以很容易地推广(使用range
而不是那些文字元组),但我试图保持尽可能简单。
Q的主题是关于创建矩阵,这个代码没有做,但是Q的主体全部都是关于打印,所以我专注于此!如果你想要不同的东西,请澄清(编辑你的Q)和评论......
答案 2 :(得分:2)
使用石斑鱼配方referred to here将每个列表拆分为3个,然后打印每组3个。
def grouper(iterable, n, fillvalue=None):
args = [iter(iterable)] * n
return itertools.zip_longest(*args, fillvalue=fillvalue)
# zip_longest is new in Python3
for matrix in text:
for chunk in grouper(matrix, 3):
print(chunk)
print() # empty line in between each 3x3
结果:
(4, 3, 8)
(9, 5, 1)
(2, 7, 6)
(8, 3, 4)
(1, 5, 9)
(6, 7, 2)
(6, 1, 8)
(7, 5, 3)
(2, 9, 4)
(6, 9, 8)
(7, 5, 3)
(2, 1, 4)
(6, 1, 8)
(7, 5, 3)
(2, 1, 4)
要从问题中输出文字输出,你必须做一些格式化,但它不应该太糟糕。类似的东西:
for matrix in text:
for chunk in grouper(matrix, 3):
print(" ".join(map(str, chunk)))
print()
结果:
4 3 8
9 5 1
2 7 6
8 3 4
1 5 9
6 7 2
6 1 8
7 5 3
2 9 4
6 9 8
7 5 3
2 1 4
6 1 8
7 5 3
2 1 4
6 1 3
2 9 4
8 7 5
答案 3 :(得分:0)
for a, b ,c in (x[i:i+3] for x in text for i in range(0,len(x),3)):
print(a,b,c)
4 3 8
9 5 1
2 7 6
8 3 4
1 5 9
6 7 2
6 1 8
7 5 3
2 9 4
6 9 8
7 5 3
2 1 4
6 1 8
7 5 3
2 1 4
6 1 3
2 9 4
8 7 5
答案 4 :(得分:0)
我不完全清楚你追求的是什么,所以这里有一个猜测:
text = [[4, 3, 8, 9, 5, 1, 2, 7, 6], [8, 3, 4, 1, 5, 9, 6, 7, 2],
[6, 1, 8, 7, 5, 3, 2, 9, 4], [6, 9, 8, 7, 5, 3, 2, 1, 4],
[6, 1, 8, 7, 5, 3, 2, 1, 4], [6, 1, 3, 2, 9, 4, 8, 7, 5]]
# convert to 3D list in-place
for i, data in enumerate(text):
text[i] = [[data[0], data[1], data[2]],
[data[3], data[4], data[5]],
[data[6], data[7], data[8]]]
# utility for print a 3x3 matrix
def formatrix(label, matrix):
indent = len(label)
return '\n'.join((label + ', '.join(map(str, matrix[0])),
indent*' ' + ', '.join(map(str, matrix[1])),
indent*' ' + ', '.join(map(str, matrix[2]))))
# print each matrix in reformatted list
for i, matrix in enumerate(text):
print(formatrix('text[%s]: ' % i, matrix))
输出:
text[0]: 4, 3, 8
9, 5, 1
2, 7, 6
text[1]: 8, 3, 4
1, 5, 9
6, 7, 2
text[2]: 6, 1, 8
7, 5, 3
2, 9, 4
text[3]: 6, 9, 8
7, 5, 3
2, 1, 4
text[4]: 6, 1, 8
7, 5, 3
2, 1, 4
text[5]: 6, 1, 3
2, 9, 4
8, 7, 5