Comment obtenir un tableau vide de n'importe quelle taille en python?

120

Je veux essentiellement un équivalent python de ceci en C:

int a[x];

mais en python je déclare un tableau comme:

a = []

et le problème est que je veux attribuer des emplacements aléatoires avec des valeurs telles que:

a[4] = 1

mais je ne peux pas faire cela avec python, car le tableau est vide.

user299648
la source

Réponses:

240

Si par "tableau" vous entendez en fait une liste Python, vous pouvez utiliser

a = [0] * 10

ou

a = [None] * 10
Sven Marnach
la source
91
Une chose à laquelle vous devez faire attention a = [obj] * Nest que le même obj apparaît dans chaque élément du tableau. S'il s'agit d'un objet mutable et que vous modifiez un élément, tout sera changé. ... Mais, pour cet exemple utilisant des entiers (ou tout autre type immuable), cela ne fait aucune différence. Ou, si vous n'attribuez que des éléments, ce n'est pas non plus un problème. (Je le mentionne parce que je l'ai fait exactement trop souvent :))
dappawit
4
Cela m'a beaucoup mordu sur mon tout premier projet Python, @dappawit. Tenez compte de cet avertissement.
The Nate
il crée la même référence pour les objets
Amr Alaa
22

Vous ne pouvez pas faire exactement ce que vous voulez en Python (si je vous lis correctement). Vous devez mettre des valeurs pour chaque élément de la liste (ou comme vous l'avez appelé, tableau).

Mais, essayez ceci:

a = [0 for x in range(N)]  # N = size of list you want
a[i] = 5  # as long as i < N, you're okay

Pour les listes d'autres types, utilisez autre chose que 0. Noneest souvent également un bon choix.

dappawit
la source
2
Cette réponse frôle le incorrect. range(N)produira déjà une liste si Python <3.0.
Apalala
1
Certes, cela produira une liste. Si vous êtes préoccupé par l'efficacité, vous pouvez utiliser xrange(N)Python 2.x. Cependant, je ne suis pas sûr de savoir comment cela est à la limite du incorrect. Je préfère cela a = range(N)parce que chaque élément commence par un "défaut" sensible. Je suppose que c'est une question d'opinion.
dappawit
16

Vous pouvez utiliser numpy:

import numpy as np

Exemple à partir d'un tableau vide :

np.empty([2, 2])
array([[ -9.74499359e+001,   6.69583040e-309],
       [  2.13182611e-314,   3.06959433e-309]])  
DanielTheRocketMan
la source
7

Déclarez simplement la liste et ajoutez chaque élément. Par exemple:

a = []
a.append('first item')
a.append('second item')
Lyle
la source
5
Comment pourriez-vous alors `` attribuer des créneaux aléatoires ''
Tdelang
5

vous pouvez également étendre cela avec la méthode d'extension de la liste.

a= []
a.extend([None]*10)
a.extend([None]*20)
Pythoni
la source
1

Si vous (ou d'autres chercheurs de cette question) étiez réellement intéressé par la création d'un tableau contigu à remplir avec des entiers, considérez bytearray et memoryivew :

# cast() is available starting Python 3.3
size = 10**6 
ints = memoryview(bytearray(size)).cast('i') 

ints.contiguous, ints.itemsize, ints.shape
# (True, 4, (250000,))

ints[0]
# 0

ints[0] = 16
ints[0]
# 16
Geai
la source
1
x=[]
for i in range(0,5):
    x.append(i)
    print(x[i])
Akshar Patel
la source
2
Bien que ce code puisse résoudre la question, inclure une explication sur comment et pourquoi cela résout le problème aiderait vraiment à améliorer la qualité de votre publication et entraînerait probablement plus de votes à la hausse. N'oubliez pas que vous répondez à la question des lecteurs à l'avenir, pas seulement à la personne qui la pose maintenant. Veuillez modifier votre réponse pour ajouter des explications et donner une indication des limites et des hypothèses applicables.
Daniil le
0

Si vous voulez réellement un tableau de style C

import array
a = array.array('i', x * [0])
a[3] = 5
try:
   [5] = 'a'
except TypeError:
   print('integers only allowed')

Notez qu'il n'y a pas de concept de variable non initialisée en python. Une variable est un nom lié à une valeur, donc cette valeur doit avoir quelque chose. Dans l'exemple ci-dessus, le tableau est initialisé avec des zéros.

Cependant, cela est rare en python, sauf si vous en avez réellement besoin pour des choses de bas niveau. Dans la plupart des cas, il est préférable d'utiliser une liste vide ou un tableau numpy vide, comme le suggèrent d'autres réponses.

note bleue
la source