9.1 Création d'une copie de liste
Créer une copie d'une liste en Python est une tâche importante qui peut être nécessaire pour éviter des modifications inattendues des données lors de la manipulation des listes. Lorsqu'on travaille avec des listes, il est important de comprendre la différence entre la copie superficielle (shallow
) et la copie profonde (deep
).
Copie superficielle
Une copie superficielle crée une nouvelle liste, mais les éléments restent les mêmes (si les éléments sont des références, elles sont copiées en tant que références). Cela peut être fait de plusieurs façons :
Avec la fonction list()
:
original = [1, 2, 3]
copy = list(original)
Utilisation des tranches :
original = [1, 2, 3]
copy = original[:]
Méthode copy()
:
Copie profonde
Une copie profonde crée une nouvelle liste, dans laquelle sont créées également des copies de tous les objets imbriqués. C'est particulièrement important lorsque les listes contiennent d'autres types de données modifiables, comme d'autres listes. Pour cela, on utilise le module copy
:
import copy
original = [[1, 2], [3, 4]]
deep_copy = copy.deepcopy(original)
Quand utiliser chaque méthode
La copie superficielle est plus rapide et convient lorsque les éléments de la liste sont simples ou ne nécessitent pas de duplication (par exemple, des chaînes ou des nombres). La copie profonde est nécessaire lorsque les éléments de la liste sont eux-mêmes des collections modifiables ou lorsque les modifications de la copie ne doivent pas se refléter sur l'original.
9.2 Suppression d'un élément de la liste
Il y a cette tâche simple et complexe à la fois : supprimer un ou plusieurs éléments d'une liste dans une boucle.
Lorsque nous parcourons une liste à l'aide d'une boucle for
, la liste renvoie un objet enfant spécial — un itérateur, qui est utilisé par la boucle for
pour parcourir tous ses éléments. Et si dans le processus d'utilisation de l'itérateur [par la boucle for
] un élément est supprimé de la liste, l'itérateur peut ne pas fonctionner correctement.
Si vous avez supprimé le 3ème élément, alors le 4ème deviendra automatiquement le 3ème. Cependant, la boucle for
, via l'itérateur, passera au nouveau 4ème élément, qui était précédemment le 5ème. Donc, le 4ème élément sera sauté.
Voici quelques méthodes pour supprimer des éléments en toute sécurité :
Utilisation de la méthode remove()
Si vous savez exactement quel élément doit être supprimé, vous pouvez utiliser remove()
dans la boucle. Cependant, cela peut être inefficace si les éléments sont nombreux, car chaque appel à remove()
recherche l'élément avant de le supprimer, ce qui ralentit l'exécution.
Créer une nouvelle liste
Une méthode plus sûre consiste à créer une nouvelle liste avec uniquement les éléments à conserver :
original_list = [1, 2, 3, 4, 5, 6]
new_list = [x for x in original_list if x % 2 != 0] # garder uniquement les nombres impairs
Utilisation des indices
Vous pouvez utiliser une boucle for
avec un indice inversé pour supprimer les éléments sans risque de saut :
for i in range(len(original_list) - 1, -1, -1):
if original_list[i] % 2 == 0: # condition pour suppression
del original_list[i]
Lorsque nous parcourons la liste à l'envers, lors de la suppression d'éléments, seuls les indices des éléments déjà parcourus changent.
Utilisation d'une copie de la liste :
Supposons que vous souhaitiez supprimer tous les nombres négatifs de la liste :
numbers = [1, -1, 2, -2, 3, -3]
# Créer une copie de la liste pour une itération sûre
for number in numbers.copy():
if number < 0:
numbers.remove(number)
print(numbers) # Affichera [1, 2, 3]
9.3 Fusion de listes
Très souvent, il est nécessaire de combiner deux ou plusieurs listes en une seule. Cela peut être fait de plusieurs manières, chacune adaptée à différentes tâches et ayant ses propres caractéristiques.
Utilisation de l'opérateur +
La méthode la plus simple pour fusionner deux listes est d'utiliser l'opérateur +
. C'est une méthode directe et intuitive :
list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined_list = list1 + list2
print(combined_list) # Affichera [1, 2, 3, 4, 5, 6]
Méthode extend()
La méthode extend()
modifie la première liste en ajoutant à sa fin tous les éléments de la seconde liste. Cela modifie la liste d'origine :
list1 = [1, 2, 3]
list2 = [4, 5, 6]
list1.extend(list2)
print(list1) # Affichera [1, 2, 3, 4, 5, 6]
Compréhension de liste (List Comprehensions)
Les compréhensions de liste peuvent être utilisées pour créer de nouvelles listes en combinant des éléments de plusieurs listes en une liste complexe :
list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined_list = [item for sublist in [list1, list2] for item in sublist]
print(combined_list) # Affichera [1, 2, 3, 4, 5, 6]
Méthode append()
Vous pouvez ajouter tous les éléments du 2ème liste au 1ère un par un. Bah, comme une option.
list1 = [1, 2, 3]
list2 = [4, 5, 6]
for x in list2:
list1.append(x)
print(list1) # Affichera [1, 2, 3, 4, 5, 6]
En gros, c'est tout ce que je voulais te raconter sur les listes 😊
GO TO FULL VERSION