existe-t-il un moyen de python pour initialiser un tableau / liste multidimensionnelle sans utiliser de boucle? p>
12 Réponses :
Cela dépend de ce que vous devez initialiser le tableau, mais sûr. Vous pouvez utiliser une compréhension de liste pour créer un tableau 5 × 3, par exemple:
>>> [[0 for x in range(3)] for y in range(5)] [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]] >>> [[3*y+x for x in range(3)] for y in range(5)] [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11], [12, 13, 14]]
Cela ne compte pas comme utiliser une boucle?
Docs spécifie-la comme moyen d'initialiser la liste multidimensionnelle. Pour une liste à une dimension, l'initialisation suivante est possible list = [5] * 10 code>, mais ne peut pas l'obtenir pour travailler avec plus de dimensions. On dirait que lorsque vous faites
list = [[5] * 5] * 5 code>, chaque sous-dimension pointe sur la même mémoire, ce qui n'est pas ce que je veux.
Bien sûr, vous pouvez simplement faire
mylist = [ [1,2,3], [4,5,6], [7,8,9] ]
Vous avez absolument raison, et je ne demande pas comment cela cherchera une matrice 1000 x 1000 ...
Selon vos besoins réels, le package "standard" de facto Numpy pourrait vous fournir exactement ce dont vous avez besoin.
Vous pouvez par exemple créer un tableau multidimensionnel avec p> (initialisé avec valeurs arbitraires em>) ou créez le même Les matrices avec zéros em> partout avec p> numpy.zeros((10, 4, 100))
HM ... ces deux exemples créeraient-ils un tableau de 10 x 4 x 100?
Ils font très certainement. Vous pouvez vérifier cela en faisant a = numpy.empty ((10, 4, 100)); Imprimez A.Shape Code>.
Je ne crois pas que ce soit possible.
Vous pouvez faire quelque chose comme ceci: p> pour créer une matrice 5x5, mais ce sont des objets répétés (que vous avez Je ne veux pas). Par exemple: p> Vous devez presque certainement utiliser une sorte de boucle comme dans: p>
>>> a = [[0] * 5] * 5 C'est un peu de danger. C'est peut-être bon si vous utilisez zéro. Mais si vous essayez de poser votre variable. Vous obtenez une liste de listes qui références à la même valeur. Par exemple, lorsque vous définissez un [1] [1] = 5 - toutes la liste auront un élément en position 1!
Si vous faites des travaux numériques à l'aide de NUMPY, quelque chose comme
x = numpy.zeros ((m,n)) x = numpy.ones ((m,n))
Assurez-vous est em> un moyen ou p> mais c'est horrible et gaspillé, alors tout le monde utilise des boucles (généralement des compréhensions de liste) ou numpy p> p>
Le marquant comme accepté comme le mieux reflète la question. NUMPY NE PAS une partie de l'installation standard Python.
Cela a l'inconvénient de créer des références aux mêmes objets, voir Cette réponse
@black_puppydog, non ce n'est pas le cas. C'est pourquoi eval code> est utilisé ici
Cette réponse explique comment initialiser un tableau multidimensionnel à l'aide de numpy: Stackoverflow.com/a/3662541/975097
Recursion est votre ami: d
C'est une jolie implémentation naïve, mais cela fonctionne! P>
dim = [2, 2, 2] def get_array(level, dimension): if( level != len(dimension) ): return [get_array(level+1, dimension) for i in range(dimension[level])] else: return 0 print get_array(0, dim)
C'est juste ce que j'étais après, merci! Ma seule mise en garde est que je préfère envoyer une matrice de dimension abrégée, au lieu de deux paramètres, comme dans: [Get_array (dimension [1:]) pour J en xrange (dimension [0])]
Python n'a pas tableaux em>. Il a d'autres types de séquence allant des listes aux dictionnaires sans oublier les ensembles - la bonne dépend de vos besoins spécifiques. P>
Assumer votre "tableau" est en réalité une liste et "Initialiser" signifie affecter une liste de listes de nxm em> éléments, vous pouvez (pseudocode): p>
Vous dites que vous ne voulez pas boucler et que cela exclut les deux premiers points, mais pourquoi?
Vous dites également que vous ne voulez pas écrire la chose (en réponse à Jacobm), alors comment feriez-vous exactement cela? Je ne connais aucune autre façon d'obtenir une structure de données sans le générer dans des pièces plus petites (boucle) ou de l'écrire explicitement en bas - dans n'importe quel langage de programmation. P>
Gardez également à l'esprit qu'une liste initialisée mais vide n'est pas meilleure que la liste, sauf si vous ne mettez de données à elle. Et vous n'avez pas besoin de l'initialiser avant de mettre des données ... p>
Si ce n'est pas un exercice théorique, vous demandez probablement la mauvaise question. Je suggère que vous expliquez de quoi avez-vous besoin de faire avec ce tableau. P>
Vous allez au fond de certains des points :)) Le point de la question est très simple et demande ce qu'elle demande. Je me demandais de différentes techniques que les personnes utilisaient pour l'initialisation des listes multidimensionnelles b> et les réponses à la question reflètent parfaitement ce que je voulais savoir. Certaines personnes utilisent Bibliothèque Numpy Standard Numpy i>. Certaines personnes initialisent des listes à l'aide de pour code> des boucles évidemment. Comme Jacobm i> suggère que vous puissiez initialiser statiquement les listes, mais je souligne que cela n'est pas applicable pour les grandes listes. gnibbler i> suggère un moyen très intéressant mais génial et non efficace.
Je m'interrogeais particulièrement sur l'initialisation sans pour code> boucles, car il était déjà évident de la documentation de la manière dont vous feriez cela.
>>> a [[1, 2], [2, 3]]
Ce qui suit n'utilise aucune bibliothèque spéciale, ni eval: et il ne crée pas de références dupliquées: p> >>> arr[1][1] = 2
>>> arr
[[0, 0, 0, 0, 0],
[0, 2, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]]
Vous pouvez utiliser un tableau N-dimensionnel (Ndarray). Voici le lien vers la documentation. http://docs.scipy.org/doc/numpy/reference/arrays .ndarray.html P>
Vous pouvez faire de cette façon:
d'abord sans utiliser de boucle: p> secondaire à l'aide de la compréhension de liste de lignes directe simple: p>
Cette question est légèrement vague: voulez-vous initialiser un tableau multidimensionnel vide ou souhaitez-vous initialiser la matrice multidimensionnelle à un ensemble de valeurs spécifique?