L = [3, 1, 4, 1, 5] ou L = [] (liste vide).L[0] est le premier élément, L[-1] le dernier.len(L) renvoie le nombre d'éléments.L[a:b] renvoie les éléments d'indice a à b-1.Les indices vont de 0 à len(L) - 1. Un accès hors limites provoque une erreur IndexError.
L.append(x)x à la fin.L.insert(i, x)x à l'indice i.L.pop()L.pop(i)i.L.remove(x)x.L[i] = yi par y.Les listes sont mutables : on peut modifier leur contenu sans créer de nouvelle liste.
[expression for x in sequence]
[expression for x in sequence if condition]
Exemples :
[i**2 for i in range(5)] donne [0, 1, 4, 9, 16] ;[x for x in L if x > 0] filtre les éléments positifs de L.L2 = L ne crée pas de copie : les deux variables désignent la même liste. Pour copier, utiliser L2 = L[:] ou L2 = list(L) ;L = [[0] * 3] * 3 crée trois références vers la même sous-liste ! Utiliser [[0]*3 for _ in range(3)] ;for.fruits = ["pomme", "banane", "cerise"]
for fruit in fruits: # parcours par valeur
print(fruit)
for i in range(len(fruits)): # parcours par indice
print(f"{i} : {fruits[i]}")
pairs = [x for x in range(20) if x % 2 == 0]
# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
A = [1, 2, 3]
B = A # B est un alias de A, pas une copie
B[0] = 99
print(A) # [99, 2, 3] A est aussi modifié !
C = A[:] # C est une vraie copie
C[0] = 0
print(A) # [99, 2, 3] A n'est pas modifié
notes = [12, 8, 15, 9, 14, 11]
notes.sort() # trie en place : [8, 9, 11, 12, 14, 15]
triees = sorted(notes) # renvoie une NOUVELLE liste triée
notes.reverse() # inverse en place
print(notes.count(12)) # nombre d'occurrences de 12
print(12 in notes) # True (test d'appartenance)
matrice = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
print(matrice[1][2]) # 6 (ligne 1, colonne 2)
moyenne(L) qui renvoie la moyenne des éléments d'une liste de nombres.sans_doublons(L) qui renvoie une nouvelle liste contenant les éléments de L sans répétition, en préservant l'ordre de première apparition.interleave(L1, L2) qui entrecroise deux listes de même longueur. Par exemple, interleave([1, 2, 3], [4, 5, 6]) renvoie [1, 4, 2, 5, 3, 6].def moyenne(L):
return sum(L) / len(L)
def sans_doublons(L):
resultat = []
for x in L:
if x not in resultat:
resultat.append(x)
return resultat
def interleave(L1, L2):
resultat = []
for i in range(len(L1)):
resultat.append(L1[i])
resultat.append(L2[i])
return resultat
Vérification :
moyenne([10, 12, 14]) = $12{,}0$ ;sans_doublons([3, 1, 4, 1, 5, 3]) = [3, 1, 4, 5] ;interleave([1, 2, 3], [4, 5, 6]) = [1, 4, 2, 5, 3, 6].Réécrire chaque boucle sous forme de liste en compréhension :
# a)
resultat = []
for i in range(1, 11):
resultat.append(i ** 3)
# b)
resultat = []
for mot in ["chat", "chien", "lapin", "hamster"]:
if len(mot) > 4:
resultat.append(mot.upper())
# a)
resultat = [i ** 3 for i in range(1, 11)]
# [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]
# b)
resultat = [mot.upper() for mot in ["chat", "chien", "lapin", "hamster"]
if len(mot) > 4]
# ["CHIEN", "LAPIN", "HAMSTER"]
creer_matrice(n, p, val) qui crée une matrice $n × p$ remplie de la valeur val.transposee(M) qui renvoie la transposée d'une matrice.somme_matrices(A, B) qui renvoie la somme de deux matrices de mêmes dimensions.def creer_matrice(n, p, val):
return [[val] * p for _ in range(n)]
def transposee(M):
n = len(M) # nombre de lignes
p = len(M[0]) # nombre de colonnes
T = creer_matrice(p, n, 0)
for i in range(n):
for j in range(p):
T[j][i] = M[i][j]
return T
def somme_matrices(A, B):
n = len(A)
p = len(A[0])
return [[A[i][j] + B[i][j] for j in range(p)] for i in range(n)]
Attention : dans creer_matrice, on utilise une compréhension et non [[val]*p]*n, qui créerait $n$ références vers la même liste.
Vérification de la transposée : si $M =
1 & 2 & 3 \\ 4 & 5 & 6
$, alors $M^T =
1 & 4 \\ 2 & 5 \\ 3 & 6
$.