Tableaux/listes en Python (1/2) Stéphane Gonnord Tableaux/listes en Python (1/2) Plan Tableaux et listes Une première couche Tableaux vs listes La chêvre et le choux En pratique Création, indexation Stéphane Gonnord Slicing Compréhension Maping Retour à la théorie [email protected] www.mp933.fr Append et extend Copie de liste Passage en argument Travailler avec des listes Lycée du parc - Lyon Parcours Somme des éléments d’un tableau Vendredi 8 et 15 novembre 2013 Lycée du parc Recherche du maximum Tableaux/listes en Python (1/2) Plan Stéphane Gonnord 1. Tableaux vs. listes I I I Tableaux/vecteurs ; listes ; la chêvre et le choux. 2. En pratique I I I Création, indexation ; slicing ; listes en compréhension. 3. Seconde couche de théorie I append et extend ; I I copie de liste ; passage en argument. 4. Quelques manipulations effectives de listes I I I I parcours basique ; recherche d’un maximum ; recherche d’un élément ; etc. Plan Tableaux et listes Tableaux vs listes La chêvre et le choux En pratique Création, indexation Slicing Compréhension Maping Retour à la théorie Append et extend Copie de liste Passage en argument Travailler avec des listes Parcours Somme des éléments d’un tableau Recherche du maximum Tableaux (vecteurs) vs. listes Tableaux/listes en Python (1/2) Stéphane Gonnord Deux structures concurrentes I Les tableaux : Plan Tableaux et listes Tableaux vs listes I I I Un bloc (intervalle) de mémoire. Accès direct en temps constant. Ne peut être « prolongé » à moindre coût. La chêvre et le choux En pratique Création, indexation Slicing Compréhension Maping Retour à la théorie Append et extend I Les listes (chaînées) : I I I Accès au premier élément, ajout en tête : facile. Ou le contraire ! Accès au k -ème : difficile, coûteux. Copie de liste Passage en argument Travailler avec des listes Parcours Somme des éléments d’un tableau Recherche du maximum Une implémentation très astucieuse Tableaux/listes en Python (1/2) Stéphane Gonnord I Les tableaux redimensionnables : I I pour ajouter/étendre à moindre coût, mais avec accès rapide au k -ième ; tableau recopié au delà de certains seuils. Plan Tableaux et listes Tableaux vs listes La chêvre et le choux En pratique Création, indexation Slicing Compréhension Maping I Agrandissement d’un tableau jusqu’à 1025 éléments : I 1 + 2 + 3 + · · · + 1025 I 1 + 2 + 4 + 8 + · · · + 2048 Retour à la théorie Append et extend Copie de liste Passage en argument Travailler avec des listes Parcours Somme des éléments d’un tableau Recherche du maximum I Complexité : pire des cas, moyenne, amorti... Création, indexation Tableaux/listes en Python (1/2) Stéphane Gonnord I I I I t = [ ..., ..., ...] ; t = [0] * 10 len(t) t[0], t[1], ..., t[n-1], t[-1], ..., t[-n] >>> x = 5 >>> id(x) 161288320 >>> x = 12 >>> id(x) 161288236 >>> t = [12, 15, 42] >>> id(t) 168387212 >>> t[1] = 841 >>> t [12, 841, 42] >>> id(t) 168387212 Plan Tableaux et listes Tableaux vs listes La chêvre et le choux En pratique Création, indexation Slicing Compréhension Maping Retour à la théorie Append et extend Copie de liste Passage en argument Travailler avec des listes Parcours Somme des éléments d’un tableau Recherche du maximum Slicing Tableaux/listes en Python (1/2) Stéphane Gonnord I t[a: b] : une tranche de t >>> t = [42, 12, 15, 19, 16, 3, 40] >>> t[2 : 4] [15, 19] Plan Tableaux et listes Tableaux vs listes La chêvre et le choux En pratique Création, indexation I Mais recopiée ailleurs ! Slicing Compréhension Maping I >>> t1 = t[2 : 5] >>> t1 [15, 19, 16] >>> t1[1] = 6 >>> t, t1 ([42, 12, 15, 19, 16, 3, 40], [15, 6, 16]) >>> id(t), id(t1) 152527500, 152529132 Des variantes : t[a: ] ; t[ : b] ; t[ : ] ; t[2: -3] ; t[10: 2] ; t[a : b : s] Retour à la théorie Append et extend Copie de liste Passage en argument Travailler avec des listes Parcours Somme des éléments d’un tableau Recherche du maximum Comprehension Tableaux/listes en Python (1/2) Stéphane Gonnord I Dans R : {x ∈ R; |x | ≤ 1} = {cos t | t ∈ [0, 10]} Plan Tableaux et listes Tableaux vs listes La chêvre et le choux En pratique Création, indexation Slicing I [x for x in s if condition(x)] >>> [i for i in range(10) if i%3 == 0] [0, 3, 6, 9] I [phi(x) for x in s] Compréhension Maping Retour à la théorie Append et extend Copie de liste Passage en argument Travailler avec des listes Parcours >>> [i**2 for i in range(4)] [0, 1, 4, 9] I [phi(x) for x in s if condition(x)] >>> [i**2 for i in range(10) if i%3 == 0] [0, 9, 36, 81] Somme des éléments d’un tableau Recherche du maximum Maping Tableaux/listes en Python (1/2) Stéphane Gonnord I Pour appliquer une fonction à chaque élément d’une liste Plan Tableaux et listes Tableaux vs listes >>> def f(x): return 2*x >>> map(f, [3, 10, 40]) [6, 20, 80] La chêvre et le choux En pratique Création, indexation Slicing Compréhension Maping >>> map(est_premier, [3, 24, 91, 101]) [True, False, False, True] Retour à la théorie Append et extend Copie de liste Passage en argument >>> map(len, [ [1,15] , [10] , [4,5,6,7] ]) [2, 1, 4] I Attention : évaluation retardée en Python 3 >>> map(f, [1, 4, 10]) <map object at 0xa4ffb2c> >>> list(map(f, [1, 4, 10])) [2, 8, 20] Travailler avec des listes Parcours Somme des éléments d’un tableau Recherche du maximum Append et extend Tableaux/listes en Python (1/2) Stéphane Gonnord >>> t = [1, 3] >>> t + [17] [1, 3, 17] >>> t [1, 3] Plan Tableaux et listes Tableaux vs listes La chêvre et le choux En pratique Création, indexation Slicing Compréhension Maping >>> id(t) 152528972 >>> t = t + [17] >>> t, id(t) ([1, 3, 17], 152528428) >>> t.append(1515) >>> t, id(t) ([1, 3, 17, 1515], 152528428) >>> t.extend([’pif’, 19, ’paf’]) >>> id(t), t (152528428, [1, 3, 17, 1515, ’pif’, 19, ’paf’]) Retour à la théorie Append et extend Copie de liste Passage en argument Travailler avec des listes Parcours Somme des éléments d’un tableau Recherche du maximum Tableaux/listes en Python (1/2) Copie de liste Stéphane Gonnord I Une liste est une adresse : >>> t1 = [4, 2, 15] >>> t2 = t1[ : ] >>> t3 = t1 Plan Tableaux et listes Tableaux vs listes La chêvre et le choux En pratique Création, indexation Slicing >>> t1, t2, t3 [4, 2, 15], [4, 2, 15], [4, 2, 15] Compréhension Maping Retour à la théorie Append et extend >>> map(id, [145335084, >>> t2[1] = >>> t3[1] = [t1, t2, t3]) 145386956, 145335084] 1515 841 Copie de liste Passage en argument Travailler avec des listes Parcours Somme des éléments d’un tableau Recherche du maximum >>> t1, t2, t3 ([4, 841, 15], [4, 1515, 15], [4, 841, 15]) I En première approximation : ma_copie = t[ : ] I copy.copy vs copy.deepcopy Passage en argument Tableaux/listes en Python (1/2) Stéphane Gonnord I (Experts : passage par valeur car tableau=pointeur !) Plan I Consultation : oui ! Tableaux et listes Tableaux vs listes def maximum(t): ... La chêvre et le choux En pratique Création, indexation Slicing I Écriture : possible, mais attention... I C’est super ! Compréhension Maping Retour à la théorie Append et extend def echange(t, i, j): t[i], t[j] = t[j], t[i] I C’est une catastrophe ! Si la fonction est mal écrite (ou volontairement néfaste), elle peut détruire la donnée. Copie de liste Passage en argument Travailler avec des listes Parcours Somme des éléments d’un tableau Recherche du maximum Parcours de liste Tableaux/listes en Python (1/2) Stéphane Gonnord I Première version : for i in range(len(t)): ... (travail sur t[i]) Plan Tableaux et listes Tableaux vs listes La chêvre et le choux En pratique I Deuxième version (souvent meilleure) : Création, indexation Slicing Compréhension for x in t: ... (travail direct sur x) Maping Retour à la théorie Append et extend Copie de liste I Exemples : trouver le maximum d’un tableau... ou bien l’indice correspondant. Passage en argument Travailler avec des listes Parcours Somme des éléments d’un tableau Recherche du maximum Somme des éléments d’un tableau Tableaux/listes en Python (1/2) Stéphane Gonnord I Version 1 : def somme1(t): res = 0 for i in range(len(t)): res = res + t[i] return res I Version 2 : Plan Tableaux et listes Tableaux vs listes La chêvre et le choux En pratique Création, indexation Slicing Compréhension Maping Retour à la théorie Append et extend Copie de liste def somme2(t): res = 0 for x in t: res = res + x return res I Version 3 (votre préférée...) : def somme3(t): return sum(t) Passage en argument Travailler avec des listes Parcours Somme des éléments d’un tableau Recherche du maximum Recherche du maximum Tableaux/listes en Python (1/2) Stéphane Gonnord I I Version 1 : Plan def maxi(t): assert( len(t)>0 ) maxi_provisoire = t[0] for x in t: if x>maxi_provisoire: maxi_provisoire = x return maxi_provisoire Tableaux et listes Version 2 (...) : Travailler avec des listes def maxi_feignasse(t): return max(t) Exercice : retourner la position du maximum. Tableaux vs listes La chêvre et le choux En pratique Création, indexation Slicing Compréhension Maping Retour à la théorie Append et extend Copie de liste Passage en argument Parcours Somme des éléments d’un tableau Recherche du maximum End game Tableaux/listes en Python (1/2) Stéphane Gonnord Merci de votre attention ! Plan Tableaux et listes Tableaux vs listes La chêvre et le choux En pratique Création, indexation Slicing Compréhension Maping Retour à la théorie Append et extend Copie de liste Passage en argument Travailler avec des listes Parcours Somme des éléments d’un tableau Recherche du maximum