réponse actuellement acceptée par varunl
>>> 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 souhaitez créer une liste de listes, vous rencontrerez des erreurs de référencement. Exemple en 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 voir, chaque élément pointe vers le même objet liste. Pour contourner cela, 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 y a probablement une façon par défaut de python intégrée de faire cela (au lieu d'écrire une fonction), mais je ne suis pas sûr de ce que c'est. Serait heureux d'être corrigé!
Modifier: 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]]