Tableaux/listes en Python (1/2)

publicité
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
Téléchargement