Одним из решений является использование numpy ( скачать здесь ) matrix
:
>>> from numpy import zeros, matrix
>>> n = 2
>>> mat = matrix(zeros([3*n, 7]))
>>> mat
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., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0.]])
Однако, как отмечалось выше @joris, с пустой матрицей все ваши данные должны быть одного типа.
>>> mat[0,2] = 14
>>> mat
matrix([[ 0., 0., 14., 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., 0., 0., 0.]])
>>> mat[0,1] = 's'
Traceback (most recent call last):
File "<pyshell#139>", line 1, in <module>
mat[0,1] = 's'
ValueError: could not convert string to float: s
Вы, вероятно, хотите использовать вместо этого вложенный list
, поскольку это гораздо более гибкий и универсальный тип данных, и к тому же его легче освоить. Для этого я бы направил вас на этот вопрос , поскольку @Mike Graham правильно объяснил их. Возможно, вы захотите определить метод как:
def shape_zeros(n):
# Here's where you build up your "matrix"-style nested list
pass # The pass statement does nothing!
Вот несколько советов по заполнению тела кода вышеупомянутой функции. Во-первых, вы можете создать целый список дубликатов с помощью оператора *
:
>>> row = [0] * 7
>>> row
[0, 0, 0, 0, 0, 0, 0]
Далее вы можете вкладывать списки в списки; но будьте осторожны при перемещении списков, так как имя списка фактически похоже на указатель:
>>> mat = []
>>> n = 2
>>> for i in range(n*3):
mat.append(row)
>>> mat
[[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, 0, 0, 0, 0, 0, 0]]
>>> mat[0][0] = 1
>>> mat
[[1, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0, 0]]
Вы можете избежать вышеуказанной проблемы, создав свои подсписки (строки) отдельно или используя функцию конструктора list(old_list)
, чтобы сделать копию. Когда вы построите это правильно, вы можете получить доступ к элементу вложенного списка или манипулировать им следующим образом:
>>> mat[0][0] = 1
>>> mat[1][2] = 'Q_Q'
>>> mat[2][0] = 3
>>> mat[2][2] = 5
>>> mat
[[1, 0, 0, 0, 0, 0, 0],
[0, 0, 'Q_Q', 0, 0, 0, 0],
[3, 0, 5, 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]]
Удачи!