Как сделать матрицы в Python?
я погуглил его и искал 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
я получил
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
для отображения, но я даже не мог заставить их ломать линии, которые вместо этого все они будут отображаться как
[['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']]
и если я попытаюсь добавить n к ним или распечатать "" и т. д. Это просто не работает.. N будет отображаться как 'n' и печатать отобразится перед матрицей.
5 ответов
зацикливание помогает:
for row in matrix:
print ' '.join(row)
или использовать вложенные str.join()
вызовы:
print '\n'.join([' '.join(row) for row in matrix])
демо:
>>> 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
если вы хотите показать транспонированные строки и столбцы, транспонируйте матрицу с помощью zip()
функции; если вы проходите каждую строку в качестве отдельного аргумента для функции zip()
рекомбинирует это значение по значению как кортежи столбцов вместо этого. The *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
ответ на ваш вопрос зависит от ваших целей обучения. Если вы пытаетесь заставить матрицы "щелкнуть", чтобы вы могли использовать их позже, я бы предложил посмотреть на Numpy array
вместо списка списков. Это позволит вам легко вырезать строки, столбцы и подмножества. Просто попробуйте получить столбец из списка списков, и вы будете разочарованы.
С помощью списка списков в качестве матрицы...
давайте возьмем Ваш список списков для пример:
L = [list("ABCDE") for i in range(5)]
легко получить подэлементы для любой строки:
>>> L[1][0:3]
['A', 'B', 'C']
или всю строку:
>>> L[1][:]
['A', 'B', 'C', 'D', 'E']
но попробуйте перевернуть это, чтобы получить те же элементы в формате столбца, и это не сработает...
>>> L[0:3][1]
['A', 'B', 'C', 'D', 'E']
>>> L[:][1]
['A', 'B', 'C', 'D', 'E']
вам нужно будет использовать что-то вроде понимания списка, чтобы получить все 1-е элементы....
>>> [x[1] for x in L]
['B', 'B', 'B', 'B', 'B']
введите матриц
если вы используете массив вместо этого, вы получите нарезку и индексирование что вы ожидаете от 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']]
захватить строку 1 (как со списками):
>>> Y[1,:]
array(['A', 'B', 'C', 'D', 'E'],
dtype='|S1')
захватить столбец 1 (новый!):
>>> Y[:,1]
array(['B', 'B', 'B', 'B', 'B'],
dtype='|S1')
Итак, теперь, чтобы сгенерировать печатную матрицу:
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
вы также можете использовать функцию append
b = [ ]
for x in range(0, 5):
b.append(["O"] * 5)
def print_b(b):
for row in b:
print " ".join(row)
вы можете сделать это коротко, как это:
matrix = [["A, B, C, D, E"]*5]
print(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
петли каждый раз, когда вы хотите распечатать матрицу.
def print_matrix(matrix):
for row in matrix:
new_row = str(row)
new_row = new_row.replace(',','')
new_row = new_row.replace('[','')
new_row = new_row.replace(']','')
print(new_row)
примеры
пример матрицы 5x5 с 0
в каждой записи:
>>> test_matrix = [[0] * 5 for i in range(5)]
>>> print_matrix(test_matrix)
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
пример матрицы 2x3 с 0
как каждая запись:
>>> test_matrix = [[0] * 3 for i in range(2)]
>>> print_matrix(test_matrix)
0 0 0
0 0 0
редактировать
если вы хотите, чтобы он напечатал:
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
Я предлагаю вам просто изменить способ ввода данных в списки в списках. В моем методе каждый список в большом списке представляет строку в матрице, а не столбцы.