Je voudrais savoir comment je peux initialiser un tableau (ou une liste), encore à remplir avec des valeurs, pour avoir une taille définie.
Par exemple en C:
int x[5]; /* déclaré sans ajouter d'éléments */
Comment faire cela en Python?
Je voudrais savoir comment je peux initialiser un tableau (ou une liste), encore à remplir avec des valeurs, pour avoir une taille définie.
Par exemple en C:
int x[5]; /* déclaré sans ajouter d'éléments */
Comment faire cela en Python?
La question spécifiait «.. pas encore peuplé de valeurs». Les docs Python indiquent que "None
est généralement utilisé pour représenter l'absence de valeur". Mon exemple a produit une telle liste de la taille définie, dans le plus court code possible. C'est la chose la plus proche en Python idiomatique au moment où la question a été posée.
Cela répond aux exigences de la question car vous avez un tableau de taille définie et vous pouvez indexer l'un des cinq éléments sans obtenir d'IndexError
. C'est la chose la plus proche de l'expression C.
Pourquoi ces questions ne reçoivent-elles pas de réponse évidente?
a = numpy.empty(n, dtype=object)
Cela crée un tableau de longueur n qui peut stocker des objets. Il ne peut pas être redimensionné ou ajouté. En particulier, il n'est pas gaspillé d'espace en ajoutant un remplissage à sa longueur. C'est l'équivalent en Python du Java
Object[] a = new Object[n];
Si vous êtes vraiment intéressé par les performances et l'espace et que vous savez que votre tableau ne stockera que certains types numériques, vous pouvez modifier l'argument dtype à une autre valeur comme int. Alors numpy emballera directement ces éléments dans le tableau plutôt que de faire référence à des objets int.
Si cela avait été si évident, quelqu'un d'autre l'aurait déjà fourni.. de nouveau, importer une bibliothèque juste pour obtenir cette fonctionnalité pourrait ne pas être la meilleure option.
Sauf que c'est la seule réponse ici qui est effectivement correcte. L'OP n'a pas spécifié que le chargement de module était interdit. Il n'a pas non plus demandé une liste. La question est très spécifique et cette réponse est correcte. +1
Faites ceci :
>>> d = [ [ None for y in range( 2 ) ] for x in range( 2 ) ]
>>> d
[[None, None], [None, None]]
>>> d[0][0] = 1
>>> d
[[1, None], [None, None]]
Les autres solutions mèneront à ce genre de problème :
>>> d = [ [ None ] * 2 ] * 2
>>> d
[[None, None], [None, None]]
>>> d[0][0] = 1
>>> d
[[1, None], [1, None]]
Bonne réponse. Le problème que vous mentionnez m'a embrouillé lors d'une compétition de programmation. Savez-vous exactement les mécanismes sous le capot pour provoquer cela?
Python copie les "types de données simples" par valeur, et le reste par référence, et il n'est pas toujours clair quand l'un ou l'autre se produit.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
3 votes
Tous ceux-ci: stackoverflow.com/search?q=%5Bpython%5D+array+of+fixed+size.
1 votes
Possible doublon de Python, forçant une liste à une taille fixe Ou peut-être ceci : stackoverflow.com/questions/4056768/…
3 votes
La question la plus intéressante est pourquoi vous voulez faire cela. La plupart des situations où j'ai vu cela nécessaire sont dues à de mauvaises décisions.
3 votes
Vous n'avez presque jamais besoin de cela. Dans 99% des cas, vous pouvez générer les valeurs en une seule fois, par exemple en utilisant une compréhension de liste, ou vous commencez simplement avec
[]
et.append()
ou.expand()
dans une bouclewhile
ou quelque chose comme ça (les listes sont sur-allocation donc le redimensionnement est amorti en O(1)).3 votes
Vous devriez expliquer votre motivation pour avoir besoin de ceci. Performance? Sécurité? Interfaçage avec C/C++/NumPy/...?
0 votes
x = [0]*5
fournira l'opposé équivalent deint x[5]
0 votes
Un tableau C a ses éléments dès sa création, même si vous ne pouvez pas encore les utiliser car leurs valeurs sont indéterminées.
0 votes
Aussi vous pouvez
[None for i in range(26)]
0 votes
Je ne suis pas sûr pourquoi cela a été fermé, la question liée et utilisée pour fermer cela a spécifié une liste. Une meilleure réponse pour déclarer un tableau d'entiers de taille "longueur" est: import array my_array = array.array('h', [0] * longueur)
0 votes
Initialiser un tableau avant de le remplir peut être utile pour les algorithmes de programmation dynamique, où l'ordre dans lequel le tableau est rempli n'est pas direct. Par exemple, je ne peux pas imaginer un moyen facile de remplir un tableau 2D en diagonal en utilisant des compréhensions de liste.