Python : Listes
Méthodes de listes
Quelques méthodes de listes que je n'utilise pas souvent.
Je partirais ici d'une liste nommée L tel que L = ["a", "b", "c", "d"]
- Supprimer un élément : L.remove("a")
- Les index négatifs partent de la fin : print(L[-1]) >>> d
- Découpage :
- Du début : print(L[:2]) >>> ['a', 'b']
- De la fin : print(L[2:]) >>> ['c', 'd']
- Entre 2 : print(L[1:3]) >>> ['b', 'c']
- L[n:p] renvoie les éléments de n inclut à p-1
- Attention, Ce genre de découpage renvoie vers une copie de la liste et pas vers l'original ! Même si ça marche étrangement avec del : del (L[0:2]) fonctionne par exemple
- La méthode index : L.index("b") >>> 1
- Si l'élement recherché est plusieurs fois dans la liste, c'est la première occurence qui est renvoyée
- Supprimer l'objet situé à un index : L.pop(2) supprime "c"
- Utilisé seul, pop supprime le dernier élément d'une liste :
a = L.pop()
>>> L ['a', 'b', 'c'] >>> a 'd'
- Insérer un truc à un index : L.insert(2, "oui") >>> ['a', 'b', 'oui', 'c', 'd']
- La syntaxe : L.insert(index, objet)
- Insérer une liste à la fin d'une autre : extend fonctionne comme append mais avec une liste : L.extend(["e", "f"]) >>> ['a', 'b', 'c', 'd', 'e', 'f']
- Trier une liste : sort
>>> M = ["d", "b", "c", "a"]
>>> M.sort() >>> M
['a', 'b', 'c', 'd']
- Trouver le min ou le max d'une liste : min(L) ou max(L)
- Inverser une liste :
>>> L.reverse()
>>> L
['d', 'c', 'b', 'a']
enumerate
Une méthode simple pour énumérer le contenu d'une liste est d'utiliser la fonction enumerate (plutôt que de faire des compteurs...):
>>> li = ['a', 'b', 'c'] >>> for index, letter in enumerate(li): ... print(index, letter) ... 0 a 1 b 2 c
Bon à savoir
La méthode for appliquée sur une liste est un peu spéciale. En effet, l'itérateur ne parcoure pas forcément la liste en entier mais il utilise un compteur invisible qui s'incrémente de 1 à chaque fois. Du coup, en modifiant la liste pendant qu'on la parcoure, on peut avoir des surprises : si on enlève des éléments notamment, comme la liste change en cours de route, cela peut poser problème.
def supprimeVoyelle (L,V) : # fonction censée supprimée les chaines de la liste L contenant la voyelle V for i in L : if V in i : L.remove(i) # programme principal LSimpson = ["Homer", "Marge", "Bart", "Lisa", "Moe", "Charles", "Nelson", "Milhouse", "Krusty", "Barney"] supprimeVoyelle (LSimpson,"a") print(LSimpson) #Bart n'as pas disparu : ke compteur invisible a supprimé Marge, du coup Bart l'as remplacée sans être analysé
Par rapport aux suppressions :
def videListe(L) : L=[] L = [1, 2, 3] print(L) videListe(L) print(L)
Ça ne fonctionne pas parce que L = [] ne vide pas la liste, il crée un nouvel objet interne à la fonction (même si L est passée par référence... va comprendre). Il faut utiliser del L([:]).
Aussi, on peut créer une liste avec un objet range.
L = list(range(5, 18, 2))