Python >> Tutoriel Python >  >> Python

Comment créer une liste Python de taille n ?

Pour créer une liste de n éléments d'espace réservé, multipliez la liste d'un seul élément d'espace réservé par n . Par exemple, utilisez [None] * 5 pour créer une liste [None, None, None, None, None] avec cinq éléments None . Vous pouvez ensuite écraser certains éléments avec des affectations d'index. Dans l'exemple, lst[2] = 42 entraînerait la liste modifiée [None, None, 42, None, None] .

Jouons avec un shell de code interactif avant de plonger dans la solution détaillée !

Exercice :Initialise la liste avec n=20 éléments d'espace réservé -1 et exécutez le code.


Ensuite, vous découvrirez le problème plus formel et plongerez dans la solution étape par étape.

Problème :Soit un entier n . Comment initialiser une liste avec n éléments d'espace réservé ?

# n=0 --> []
# n=1 --> [None]
# n=5 --> [None, None, None, None, None]

Solution :Utiliser l'opération de concaténation de liste * .

n = 5
lst = [None] * n
print(lst)
# [None, None, None, None, None]

Vous pouvez modifier l'élément n comme vous voulez. Dans les opérations suivantes, vous pouvez écraser tous les espaces réservés None répertorier les éléments à l'aide d'opérations d'affectation d'index simples :

lst[0] = 'Alice'
lst[1] = 0
lst[2] = 42
lst[3] = 12
lst[4] = 'hello'
print(lst)
# ['Alice', 0, 42, 12, 'hello']

Cependant, il y a un petit problème si vous voulez créer une liste avec des objets modifiables (comme une liste de listes) :

lst = [[]] * n
print(lst)
# [[], [], [], [], []]

lst[2].append(42)

print(lst)
# [[42], [42], [42], [42], [42]]

La modification d'un élément de liste modifie tous les éléments de liste car tous les éléments de liste font référence au même objet de liste en mémoire :

La solution consiste à utiliser la compréhension de liste (voir mon tutoriel de blog détaillé sur la compréhension de liste pour un guide complet) :

lst = [[] for _ in range(n)]
print(lst)
# [[], [], [], [], []]

lst[2].append(42)
print(lst)
# [[], [], [42], [], []]

Dans la visualisation suivante, vous pouvez voir comment chaque élément fait désormais référence à un objet de liste indépendant en mémoire :

Exercice :Lancez la visualisation et convainquez-vous qu'un seul élément est modifié ! Pourquoi est-ce le cas ?