Une solution consiste à utiliser un numpy (download here) 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.]])
Cependant, comme il est indiqué ci-dessus par @joris, avec une matrice numpy toutes vos données doivent être du même type.
>>> 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
Vous voulez probablement utiliser une place list
imbriquée, puisque cela est loin d'être un type de données plus souple et générique, et en plus est plus facile d'obtenir le coup de. Pour cela, je vous renvoie à this question, puisque @Mike Graham fait un bon travail pour les expliquer. Vous pouvez définir une méthode comme:
def shape_zeros(n):
# Here's where you build up your "matrix"-style nested list
pass # The pass statement does nothing!
Voici quelques conseils pour remplir le corps de code de la fonction ci-dessus. D'abord, vous pouvez construire une liste complète des doublons avec l'opérateur astérisque *
:
>>> row = [0] * 7
>>> row
[0, 0, 0, 0, 0, 0, 0]
Ensuite, vous pouvez les listes des nids dans les listes; mais faites attention lors du déplacement des listes autour, comme le nom de la liste est en fait comme un pointeur:
>>> 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]]
Vous pouvez éviter le problème ci-dessus en créant vos sous-listes (lignes) séparément ou en utilisant une fonction constructeur list(old_list)
pour faire une copie. Lorsque vous le créez correctement, vous pouvez accéder/manipuler un élément d'une liste imbriquée comme ceci:
>>> 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]]
Bonne chance!
s'il vous plaît modifier votre question pour reformater votre code. –
Pourquoi ne pas simplement faire de la matrice la bonne taille en premier lieu? 'mat = numpy.zeros ((3,7))'. – katrielalex
Quel est le but de la matrice? Parce que si vous voulez utiliser des tableaux numpy vous ne pouvez pas mélanger des nombres et des chaînes comme ça. – joris