La réponse de varunl actuellement acceptée
>>> l = [None] * 10
>>> l
[None, None, None, None, None, None, None, None, None, None]
Fonctionne bien pour les types non référencés comme les nombres. Malheureusement, si vous voulez créer une liste de listes, vous rencontrerez des erreurs de référencement. Exemple dans Python 2.7.6 :
>>> a = [[]]*10
>>> a
[[], [], [], [], [], [], [], [], [], []]
>>> a[0].append(0)
>>> a
[[0], [0], [0], [0], [0], [0], [0], [0], [0], [0]]
>>>
Comme vous pouvez le constater, chaque élément pointe vers le même objet liste. Pour contourner ce problème, vous pouvez créer une méthode qui initialisera chaque position à une référence d'objet différente.
def init_list_of_objects(size):
list_of_objects = list()
for i in range(0,size):
list_of_objects.append( list() ) #different object reference each time
return list_of_objects
>>> a = init_list_of_objects(10)
>>> a
[[], [], [], [], [], [], [], [], [], []]
>>> a[0].append(0)
>>> a
[[0], [], [], [], [], [], [], [], [], []]
>>>
Il existe probablement un moyen par défaut, intégré à Python, de faire cela (au lieu d'écrire une fonction), mais je ne suis pas sûr de ce que c'est. Je serais heureux d'être corrigé !
Edit : C'est [ [] for _ in range(10)]
Exemple :
>>> [ [random.random() for _ in range(2) ] for _ in range(5)]
>>> [[0.7528051908943816, 0.4325669600055032], [0.510983236521753, 0.7789949902294716], [0.09475179523690558, 0.30216475640534635], [0.3996890132468158, 0.6374322093017013], [0.3374204010027543, 0.4514925173253973]]
1 votes
Duplicata possible de Initialisation d'une liste à un nombre connu d'éléments en Python
10 votes
Une "liste vide" (
[]
) a par définition des éléments nuls. Ce que vous voulez apparemment, c'est une liste de valeurs fantaisistes du typeNone
,0
o''
.1 votes
Pour générer une liste à partir de
0
a9
vous devriez en fait utiliserfor i in range(0, 10)
ce qui signifiefor (int i = 0, i < 10, i++)
.