我用Google搜索并搜索了StackOverflow和YouTube ..我只是无法在Python中使用矩阵点击我的脑袋.有人可以帮帮我吗?我只是想创建一个显示的基本5x5盒子:
A A A A A
B B B B B
C C C C C
D D D D D
E E E E E
Run Code Online (Sandbox Code Playgroud)
我有
a b c d e
a b c d e
a b c d e
a b c d e
a b c d e
Run Code Online (Sandbox Code Playgroud)
显示,但我甚至无法让他们打破那些,而不是所有他们会出现
[['A', 'B', 'C', 'D', 'E'], ['A', 'B', 'C', 'D', 'E'], ['A', 'B', 'C', 'D', 'E'], ['A', 'B', 'C', 'D', 'E'], ['A', 'B', 'C', 'D', 'E']]
Run Code Online (Sandbox Code Playgroud)
如果我尝试将\n添加到它们或打印""等它只是不起作用.. \n将显示为'A \n'并且打印将显示在矩阵之前.
请有人帮助我,即使你把我引导到一个非常明显的地方,让我看起来像个白痴,我只想学习这个.
ber*_*roe 10
您的问题的答案取决于您的学习目标.如果您试图让矩阵"点击"以便以后可以使用它,我建议您查看Numpy array而不是列表.这样可以轻松地切出行,列和子集.只是尝试从列表列表中获取列,您将感到沮丧.
我们以您的列表列表为例:
L = [list("ABCDE") for i in range(5)]
Run Code Online (Sandbox Code Playgroud)
任何行都可以轻松获取子元素:
>>> L[1][0:3]
['A', 'B', 'C']
Run Code Online (Sandbox Code Playgroud)
或者整行:
>>> L[1][:]
['A', 'B', 'C', 'D', 'E']
Run Code Online (Sandbox Code Playgroud)
但试着翻转它以获得列格式的相同元素,它将无法正常工作......
>>> L[0:3][1]
['A', 'B', 'C', 'D', 'E']
>>> L[:][1]
['A', 'B', 'C', 'D', 'E']
Run Code Online (Sandbox Code Playgroud)
你必须使用像list comprehension这样的东西来获得所有的第1个元素....
>>> [x[1] for x in L]
['B', 'B', 'B', 'B', 'B']
Run Code Online (Sandbox Code Playgroud)
如果您使用数组,您将得到您期望从MATLAB或R(或大多数其他语言)的切片和索引:
>>> import numpy as np
>>> Y = np.array(list("ABCDE"*5)).reshape(5,5)
>>> print Y
[['A' 'B' 'C' 'D' 'E']
['A' 'B' 'C' 'D' 'E']
['A' 'B' 'C' 'D' 'E']
['A' 'B' 'C' 'D' 'E']
['A' 'B' 'C' 'D' 'E']]
>>> print Y.transpose()
[['A' 'A' 'A' 'A' 'A']
['B' 'B' 'B' 'B' 'B']
['C' 'C' 'C' 'C' 'C']
['D' 'D' 'D' 'D' 'D']
['E' 'E' 'E' 'E' 'E']]
Run Code Online (Sandbox Code Playgroud)
抓住第1行(与列表一样):
>>> Y[1,:]
array(['A', 'B', 'C', 'D', 'E'],
dtype='|S1')
Run Code Online (Sandbox Code Playgroud)
抓住第1列(新!):
>>> Y[:,1]
array(['B', 'B', 'B', 'B', 'B'],
dtype='|S1')
Run Code Online (Sandbox Code Playgroud)
所以现在生成你的印刷矩阵:
for mycol in Y.transpose():
print " ".join(mycol)
A A A A A
B B B B B
C C C C C
D D D D D
E E E E E
Run Code Online (Sandbox Code Playgroud)
循环有助于:
for row in matrix:
print ' '.join(row)
Run Code Online (Sandbox Code Playgroud)
或使用嵌套str.join()调用:
print '\n'.join([' '.join(row) for row in matrix])
Run Code Online (Sandbox Code Playgroud)
演示:
>>> matrix = [['A', 'B', 'C', 'D', 'E'], ['A', 'B', 'C', 'D', 'E'], ['A', 'B', 'C', 'D', 'E'], ['A', 'B', 'C', 'D', 'E'], ['A', 'B', 'C', 'D', 'E']]
>>> for row in matrix:
... print ' '.join(row)
...
A B C D E
A B C D E
A B C D E
A B C D E
A B C D E
>>> print '\n'.join([' '.join(row) for row in matrix])
A B C D E
A B C D E
A B C D E
A B C D E
A B C D E
Run Code Online (Sandbox Code Playgroud)
如果要显示转置的行和列,请使用该zip()函数转置矩阵; 如果将每一行作为单独的参数传递给函数,则将zip()这些值重新组合为值作为列的元组.该*args语法允许您将行作为独立参数的整个序列:
>>> for cols in zip(*matrix): # transposed
... print ' '.join(cols)
...
A A A A A
B B B B B
C C C C C
D D D D D
E E E E E
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
92506 次 |
| 最近记录: |