Introduction à Python - 1 - Université Paris-Est Marne-la

Transcription

Introduction à Python - 1 - Université Paris-Est Marne-la
Introduction à Python - 1
Traitement Automatique des Langues
Master 2 Informatique
Université Paris-Est Marne-la-Vallée
Matthieu Constant
Introduction à Python
●
Python = langage de programmation
●
créateur: Guido Van Rossum
●
date: début des années 90
●
url: www.python.org
Caractéristiques - 1
●
syntaxe simple
●
langage interprété
●
multi-paradigme (programmation impérative structurée,
orientée objet et fonctionnelle)
Caractéristiques - 2
●
typage dynamique “fort”
●
gestion automatique de la mémoire
●
gestion d'exceptions
●
utilisation possible de librairies C et C++ sans appel
système
Syntaxe - 1
●
●
●
conçu pour être un langage lisible (visuellement épuré)
moins de constructions syntaxiques que d'autres langages
(ex. C, Perl)
les blocs sont identifiés par l'indentation (au lieu de
l'accolade pour le C par ex.)
Syntaxe - 2
●
ex1: fonction factorielle en C
int factorielle(int x) {
if (x == 0)
return 1;
else
return x * factorielle(x-1);
}
●
ex2: fonction factorielle en Python
def factorielle(x):
if x == 0:
return 1
else:
return x * factorielle(x-1)
Références
●
tutoriels :
http://www.python.org/doc/current/tut/tut.html
http://www.ebgm.jussieu.fr/~fuchs/python/index.html
http://quentel.pierre.free.fr/python-trad/lib.html
●
Wikipedia :
http://fr.wikipedia.org/wiki/Python_(langage)
Plan
●
démarrer et premiers pas
●
structures de contrôle
●
fonctions et modules
●
structures de données
●
quelques techniques
Démarrer
Démarrer
●
mode interactif
●
scripts
Mode interactif - 1
●
lancement de l'interpréteur : commande python
mat@ceressou:~$ python
Python 2.4.4 (#2, Jul 21 2007, 11:00:24)
[GCC 4.1.3 20070718 (prerelease) (Debian 4.1.2-14)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
●
>>> : invite de commande
●
autre interpréteur: ipython (avec complétion)
Mode interatif - 2
●
chaque ligne de code est lue, interprétée et exécutée
●
exemple d'une commande :
>>> print "Hello World!"
Hello World!
>>>
●
quitter l'interpréteur: Ctrl-D
Script - 1
●
possibilité d'utiliser un script
●
soit un fichier test.py
print "Hello World!"
print "Hello Sun!"
●
lancement du script:
mat@ceressou:~/courses/m2/tal/data$ python test.py
Hello World!
Hello Sun!
Script - 2
●
rendre le fichier script directement exécutable:
–
indiquer la localisation de l'interpréteur Python
#!/usr/bin/python
print "Hello World!"
print "Hello Sun!"
–
●
modifier les droits du fichier (chmod u+x test.py)
lancer le script:
mat@ceressou:~/courses/m2/tal/data$ ./test.py
Hello World!
Hello Sun!
Script - 3
●
une alternative :
#!/usr/bin/env python
print "Hello World!"
print "Hello Sun!"
Commentaires
●
un commentaire est précédé du symbole #
●
exemple:
#!/usr/bin/python
# ceci est un commentaire
print "Hello World!"
print "Hello Sun!" # ceci est un autre commentaire
Encodage d'un script
●
●
possibilité de spécifier l'encodage du fichier source:
–
juste après la ligne #! spécifiant le chemin de l'interpréteur
–
écrire: # -*- coding: <encoding> -*-, où <encoding> est
l'encodage
exemple:
#!/usr/bin/python
# -*- coding: utf-8 -*# ceci est un commentaire très concis
print “L'unicode n'est pas un problème”
Premiers pas
Premiers pas
●
variables
●
types et opérations de base
●
listes
●
string
●
premier programme “évolué”
Variables
●
Déclaration et initialisation d'une variable en même
temps:
>>> x = 2
>>> x
2
●
●
Le signe = permet d'assigner une valeur (ex. 2) à une
variable (ex. x)
On n'indique pas le type de la variable : il se déduit
automatiquement de l'initialisation !
Types de base
●
●
●
nombres
–
entiers : x = 2
–
réels : x = 3.5
–
complexes : x = 1+3j
chaîne de caractères (ou string):
–
chaîne standard : x = ”string” ou x = 'string'
–
chaîne unicode : x = u'chaîne'
listes
–
liste : x = [3,1,7]
Opérations de base - 1
●
●
Nombres
–
opération “+” : addition
–
opération “-” : soustraction
–
opération “*” : multiplication
–
opération “/” : division
Exemple:
>>> x = 5.0
>>> y = 2.0
>>> (x+y)/y
3.5
Opérations de base - 2
●
●
cas particulier des entiers
–
opérateur “/” : division entière
–
opérateur “%” : modulo
exemple :
>>>
>>>
>>>
2
>>>
1
y=2
x=5
x/y
x%y
Opérations de base - 3
●
●
chaînes de caractères (ou string)
–
opérateur “+” : concaténation
–
opérateur “*” : répétition
exemple :
>>> x = "voici"
>>> y = "voila"
>>> x + y
'voicivoila'
>>> x * 4
'voicivoicivoicivoici'
Opérations de base - 4
●
attention : ne pas mélanger les types !
●
exemple
>>> 'yes' + 5
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: cannot concatenate 'str' and 'int' objects
●
MAIS:
>>> x = 5 # !! type entier
>>> y = 2.0
>>> (x+y)/y
3.5
Opérations de base - 5
●
Remarque :
contrairement au C, les incrémentations x++ et x-- sont
interdites.
au lieu de cela:
x += 1
x -= 1
Conversion de types - 1
●
entier => string
>>> str(3)
'3'
●
string => entier
>>> int('3')
3
●
attention
>>> int('3.0')
Traceback (most recent call last):
File "<stdin>", line 1, in ?
ValueError: invalid literal for int(): 3.0
Conversion de types - 2
●
entier => réel
>>> float(2)
2.0
●
string => réel
>>> float('2')
2.0
>>> float('2.0')
2.0
Listes - 1
●
déclaration et initialisation d'une liste
>>> a = ['idiot', 'bête', 'stupide']
>>> b = [1, 7, 8, 12]
>>> c = [1.0, 27.1, 8.9, 1.7]
●
liste mixte
>>> mixte = ['idiot', 0.7, 1,'ok']
●
liste vide
>>> vide = []
Listes - 2
●
liste imbriquée
>>> b = [1, 7, 8, 12]
>>> d = ['ah',b,1]
>>> d
['ah', [1, 7, 8, 12], 1]
Listes - 3
●
●
les indices commencent à 0 et se terminent à n-1, avec n
taille de la liste
accéder aux éléments des listes :
>>> b = [1, 7, 8, 12]
>>> b[1]
7
●
attention au dépassement de taille :
>>> b[4]
Traceback (most recent call last):
File "<stdin>", line 1, in ?
IndexError: list index out of range
Listes - 3
●
indiçage négatif
liste :
['a',
indices positifs: 0
indices négatifs: -4
●
exemple
>>> b = [1, 7, 8, 12]
>>> b[-1]
12
'b',
1
-3
'c',
2
-2
'd']
3
-1
Listes - 4
●
Récupération d'une tranche de liste
>>> b = [1, 7, 8, 12]
>>> b[1:3]
[7, 8]
>>> b[:3]
[1, 7, 8]
>>> b[1:]
[7, 8, 12]
>>> b[:]
[1, 7, 8, 12]
Listes - 5
●
concaténation avec l'opérateur '+'
>>> b = [1, 7, 8, 12]
>>> b[0:3] + [1,6]
[1, 7, 8, 1, 6]
●
modification des valeurs d'une liste
>>> b[1] = 6
>>> b
[1, 6, 8, 12]
>>> b[2:] = []
>>> b
[1, 6]
Listes - 6
●
insertion dans une liste
>>> b = [1, 7, 8, 12]
>>> b[2:2] = [20,21]
>>> b
[1, 7, 20, 21, 8, 12]
●
ajout d'une valeur en fin de liste
>>> b = [1, 7, 8, 12]
>>> b.append(22)
>>> b
[1, 7, 8, 12, 22]
Listes - 7
●
taille d'une liste : fonction len
>>> b = [1, 7, 8, 12]
>>> len(b)
4
●
créer des listes d'entiers : fonction range
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(2,8)
[2, 3, 4, 5, 6, 7]
>>> range(2,8,2)
[2, 4, 6]
String - 1
●
les chaînes de caractères peuvent être considérées
comme des listes
>>> s = "ceci est une chaine."
>>> s[2]
'c'
>>> s[5:10]
'est u'
>>> s[:10]
'ceci est u'
String - 2
●
mais ... ne sont pas modifiables !
>>> s = "ceci est une chaine."
>>> s[2] = 'a'
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: object does not support item assignment
●
pour en modifier une, besoin d'en créer une autre !
>>> s = "ceci est une chaine."
>>> s = s[:2]+'la'+s[4:]
>>> s
'cela est une chaine.'
String - 3
●
●
caractères spéciaux
–
\n : retour à la ligne
–
\t : tabulation
–
\' : guillemet simple si string = '..... '
–
\” : guillemet si string = “.....”
–
...
exemples
>>> s = "Luc dit: \"J'aime les chiens\".\n"
>>> s = 'Luc dit: "J\'aime les chiens".\n'
String à plusieurs lignes
●
les instructions suivantes sont équivalentes :
s = “xxxxx\nyyyyyy\nzzzzzzz\n”
s = 'xxxxx\nyyyyyy\nzzzzzzz\n'
s = r”xxxxx
yyyyyy
zzzzzzz”
s = '''xxxxx
yyyyyy
zzzzzzz''' # trois quotes
Premier programme évolué - 1
●
source python-1-3.py :
#!/usr/bin/python
# -*- coding: iso-8859-1 -*# La série de Fibonacci
a, b = 0, 1
while b < 10:
print b,
a,b = b,a+b
●
Résultat:
mat@ceressou:~/courses/m2/tal/data$ ./python-1-3.py
112358
Premier programme évolué - 2
●
●
●
●
assignation multiple : a, b = 0, 1 (a = 0 et b = 1)
la boucle while s'exécute tant que la condition (b < 10)
est vraie
le corps de la boucle while est indenté ! Chaque ligne
d'un même bloc doit être indenté de la même quantité
print b,
la virgule empêche le retour à la ligne après la sortie
Structures de contrôles
Structures de contrôle
●
comparaisons
●
tests if ... elif ... else ...
●
boucles for
●
boucles while
Comparaisons - 1
●
Opérateurs de comparaison:
–
x == y
# x est égal à y
–
x != y
# x est différent de y
–
x<y
# x est inférieur à y
–
x <= y
# x est inférieur ou égal à y
–
x>y
# x est supérieur à y
–
x >= y
# x est supérieur ou égal à y
Comparaisons - 2
●
exemple sur les entiers
>>> x,y = 2,3
>>> x == y
False
>>> x < y
True
●
exemple sur les string
>>> x,y,z = "aab","aab","aaa"
>>> x != y
False
>>> x > z
True
Opérateurs booléens - 1
●
OU logique : or
>>> x,y,z = "aaa",2,3
>>> x == "bbb" or z != y
True
>>> x == "bbb" or z == y
False
●
ET logique : and
>>> x == "bbb" and z != y
False
>>> x == "aaa" and z != y
True
Opérateurs booléens - 2
●
NON logique : not
>>> x = 5
>>> not x == 5
False
>>> not x != 5
True
Opérateurs booléens - 3
●
priorité des opérateurs booléens : not > and > or
>>> True or True and False
True
>>> (True or True) and False
False
>>> not True or True
True
>>> not (True or True)
False
Instructions conditionnelles - 1
●
instruction if
x=2
if x == 2:
print 'cool!'
●
instruction if ... else...
x=1
if x == 2:
print 'cool!'
else:
print 'oups!'
Instructions conditionnelles - 2
●
instruction if ... elif ... else ...
if x < 2:
print 'cool!'
elif x==2:
print 'oups!'
else:
print 'Hein?'
Boucles for - 1
●
●
itération sur les éléments d'une liste dans l'ordre qu'ils
apparaissent
exemple
pos = ['nom','verbe','adjectif','adverbe']
for p in pos:
print p
mat@ceressou:~/courses/m2/tal/data$ ./python-1-5.py
nom
verbe
adjectif
adverbe
Boucle for - 2
●
●
attention: il n'est pas sûr de modifier une liste sur
laquelle on est en train d'itérer !
par exemple, il peut être intéressant de faire une copie :
pos = ['nom','verbe','adjectif','adverbe']
for p in pos[:]:
if len(p) > 5:
pos.insert(0,p)
print pos
mat@ceressou:~/courses/m2/tal/data$ ./python-1-5.py
['adverbe', 'adjectif', 'nom', 'verbe', 'adjectif', 'adverbe']
Boucle for - 3
●
itération sur une séquence de nombres : utiliser la
fonction range
pos = ['nom','verbe','adjectif','adverbe']
for i in range(0,len(pos)):
print i,pos[i]
mat@ceressou:~/courses/m2/tal/data$ ./python-1-6.py
0 nom
1 verbe
2 adjectif
3 adverbe
boucle while
●
exemple :
i=0
while i < len(pos):
print i,pos[i]
i+=1
mat@ceressou:~/courses/m2/tal/data$ ./python-1-6.py
0 nom
1 verbe
2 adjectif
3 adverbe
Fonctions et modules
Fonctions et modules
●
définir une fonction
●
arguments par défaut
●
arguments mots-clés
●
formes lambda
●
modules
Fonctions - 1
●
définition d'une fonction
def cube(x):
return x**3
●
explications:
–
def : définition d'une fonction
–
x (non typé) paramètre de la fonction
–
return : retourne une valeur
–
x**3 <=> x au cube
Fonctions - 2
def exemple(n):
print (n + n * 2)
x = exemple(100)
print x
●
résultat:
300
None
●
Par défaut, une fonction retourne la valeur None
Documentation des fonctions
●
la première ligne du corps de la fonction peut être une
documentation, si elle est sous la forme d'une string
●
on l'appelle docstring
●
exemple
def exemple(n):
"""Affiche un exemple de fonction avec pour parametre 'n'."""
print (n + n * 2)
print exemple.__doc_
Passage des arguments d'une fonction
●
pas besoin de préciser le typage des arguments de la
fonction : typage dynamique
def fois(x,y):
return x*y
print fois(3,7)
print fois('tata',3)
●
résultat :
21
tatatatatata
Renvoi de plusieurs valeurs - 1
●
●
une fonction peut renvoyer plusieurs valeurs (comme en
perl)
c'est impossible en C!!!
>>> def plusieurs(n):
... return (n,n/2,n/3)
...
>>> plusieurs(7)
(7, 3, 2)
●
ici, elle renvoie un tuple
Renvoi de plusieurs valeurs - 2
●
la fonction pourrait aussi renvoyer une liste
>>> def plusieurs(n):
... return [n,n/2,n/3]
...
>>> plusieurs(7)
[7, 3, 2]
Portée des variables - 1
●
●
variable locale :
–
visible uniquement dans un environnement local (ex.
fonction)
–
non visible de l'extérieur
variable globale :
–
déclarée à la racine du script, i.e. “fonction principale”
–
visible dans tout le programme
Portée des variables - 2
>>> x = 15 #variable globale
>>> def exemple():
... x,y=2,7 # variables locales
... print 'x est egal a',x
...
>>> exemple()
x est egal a 2
>>> x
15
>>> y
Traceback (most recent call last):
File "<stdin>", line 1, in ?
NameError: name 'y' is not defined
Arguments par défaut - 1
●
possibilité de spécifier une valeur par défaut pour un ou
plusieurs arguments :
>>> def f(x=5):
... return x + 1
...
>>> f()
6
>>> f(2)
3
Arguments par défaut - 2
●
attention : une valeur par
défaut n'est évaluée
qu'une seule fois !
>>> def add(a,l=[]):
... l.append(a)
... return l
...
>>> add(2)
[2]
>>> add(3)
[2, 3]
>>> add(4)
[2, 3, 4]
●
Solution:
>>>
...
...
...
...
...
>>>
[2]
>>>
[3]
def add(a,l=None):
if l == None:
l = []
l.append(a)
return l
add(2)
add(3)
Arguments mots-clés - 1
●
il est possible d'utiliser des arguments de la forme “motclé=valeur” :
>>> def exemple(x,y=2,z=3,text='resultat'):
... print text+':',(x+y+z)
...
>>> exemple(2,z=5)
resultat: 9
>>> exemple(2)
resultat: 7
>>> exemple(2,z=5,y=3) #inversion de l'ordre
resultat: 10
Arguments mots-clés - 2
●
●
attention: les arguments classiques doivent toujours être
avant les arguments mots-clés!
quelques exemples qui échouent:
>>> exemple(y=3)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: exemple() takes at least 1 non-keyword argument (0
given)
>>> exemple(y=3,7)
SyntaxError: non-keyword arg after keyword arg
Formes lambda - 1
●
programmation fonctionnelle avec mot-clé lambda pour
construire de nouveaux objets de fonctions retournées à
l'exécution
>>>
...
...
>>>
>>>
8
>>>
14
def fabrique_incrementeur(n):
return lambda x: x+n
f=fabrique_incrementeur(5)
f(3)
f(9)
Formes lambda - 2
>>> def fabrique_repetiteur(n):
... return lambda s: s*n
...
>>> deuxFois=fabrique_repetiteur(2)
>>> deuxFois('toto')
'totototo'
>>> deuxFois(5)
10
Modules - 1
●
●
module = programme python contenant des fonctions que
l'on est amené à réutiliser souvent.
importation de modules
>>> import random
>>> random.randint(0,100)
89
●
la fonction randint du module random tire un entier au
hasard entre deux bornes (ici: 0 et 100)
Modules - 2
●
importation d'une ou plusieurs fonctions d'un module
>>> from random import random,randint
>>> randint(10,55)
37
>>> random()
0.22770046531696164
●
importation de toutes les fonctions d'un module
>>> from random import *
Types de données
Structures de données
●
listes
●
tuples
●
ensembles
●
dictionnaires
Quelques méthodes des listes - 1
●
●
●
●
append(x): ajoute x à la fin de la liste
extend(L): ajoute tous les éléments de la liste L à la fin
de la liste
insert(i,x): insert l'élément x à l'indice i de la liste
remove(x): supprime le premier élément de la liste dont
la valeur est égale à x
Quelques méthodes des listes - 2
●
●
pop([i]): supprime l'élément à l'indice i et le retourne;
par défaut, supprime le dernier élément de la liste et le
retourne.
index(x): retourne le premier élément de la liste dont la
valeur est x
●
count(x): retourne le nombre de x dans la liste
●
sort(): trie les éléments de la liste
●
reverse(): inverse l'ordre des éléments de la liste
Quelques méthodes des listes - 3
>>> a = [5, 2,9,2,1,2]
>>> a.extend([3,2])
>>> a
[5, 2, 9, 2, 1, 2, 3, 2]
>>> a.count(2),a.count(5),a.count(0)
(4, 1, 0)
>>> a.pop()
2
>>> a
[5, 2, 9, 2, 1, 2, 3]
>>> a.sort()
>>> a
[1, 2, 2, 2, 3, 5, 9]
Utiliser les listes comme des piles
>>> pile = [1,4,9]
>>> pile.append(6) # push
>>> pile.append(8)
>>> pile
[1, 4, 9, 6, 8]
>>> pile.pop()
8
>>> pile
[1, 4, 9, 6]
Création simple de listes
>>> v = [2,7,8]
>>> [x**2 for x in v] # utilisation d'un for
[4, 49, 64]
>>> [x**2 for x in v if x > 2] # utilisation de for et if
[49, 64]
>>> w = [3,-1]
>>> [x*y for x in v for y in w] # utilisation de deux for
[6, -2, 21, -7, 24, -8]
Tuple - 1
●
tuple = un type de séquence (comme liste et string)
●
tuple = une séquence de valeurs séparées par des virgules
●
exemple:
>>> x = (1,5,'exemple',[8,8])
>>> x[1]
5
>>> x
(1, 5, 'exemple', [8, 8])
Tuple - 2
●
●
quelques propriétés:
–
non modifiables
–
mais peuvent contenir des objets modifiables (ex. listes)
utilisation: coordonnées de points, enregistrement dans
base de données, ...
Ensemble - 1
●
ensemble = collection non ordonnée sans doublon
>>> a = ['chien','chat','vache','chat','souris','vache']
>>> animaux = set(a)
>>> animaux
set(['souris', 'chien', 'vache', 'chat'])
●
Tests efficaces d'appartenance
>> 'vache' in animaux
True
>>> 'cache' in animaux
False
Ensemble - 2
●
opérations sur les ensembles : intersection, union,
différence, différence symétrique
>>> e1 = set('abcd')
>>> e2 = set('cde')
>>> e1 | e2 # lettres dans e1 ou dans e2
set(['a', 'c', 'b', 'e', 'd'])
>>> e1 & e2 # lettres dans e1 et dans e2
set(['c', 'd'])
>>> e1 - e2
set(['a', 'b'])
>>> e1 - e2 # lettres dans e1 mais pas dans e2
set(['a', 'b'])
>>> e1 ^ e2 # lettres dans e1 ou e2 mais pas dans les deux
set(['a', 'b', 'e'])
Dictionnaires
●
●
●
●
un type de Python
ensemble non ordonné de paires clé-valeur, avec des clés
uniques dans le dictionnaire
indexé par clés de n'importe quel type non mutable
(nombre, string, tuple)
opérations de base: initialisation, assignation, obtenir
une valeur, suppression
Initialisation des dictionnaires
●
dictionnaire vide
>>> d = {}
●
initialisation simple
>>> id={'Paul': 32, 'Jean': 55}
●
initialisation par un constructeur
>>> id = dict([('Paul',32),('Jean',55)])
>>> id = dict(Paul=32,Jean=55) # si les clés sont des string
Opérations de base sur les dictionnaires - 1
●
obtenir la valeur associée à une clé :
>>> id['Jean']
55
●
assigner une valeur à une clé :
>>> id['Jean'] = 79
>>> id['Luc'] = 13
>>> id
{'Jean': 79, 'Luc': 13, 'Paul': 32}
Opérations de base sur les dictionnaires - 2
●
détruire un couple clé-valeur
>>> del id['Jean']
>>> id
{'Luc': 13, 'Paul': 32}
Méthodes des dictionnaires
●
obtenir la liste des clés : keys()
>>> id.keys()
['Luc', 'Paul']
●
tester l'existence d'une clé : has_key()
>>> id['Jean']
Traceback (most recent call last):
File "<stdin>", line 1, in ?
KeyError: 'Jean'
>>> id.has_key('Jean')
False
Méthodes des dictionnaires - 2
●
obtenir la valeur associée à une clé, en retournant une
valeur par défaut si la clé n'existe pas
>>
>>
>>
>>
id.get('Marise',0)
0
id.get('Paul',0)
32
Quelques astuces
Quelques astuces
●
techniques de parcours
●
techniques de tri
Parcours de dictionnaires
●
●
la clé et la valeur correspondante peuvent être extraites
en même temps en utilisant la méthode iteritems()
exemple :
>>> for k,v in id.iteritems():
... print k,v
...
Luc 13
Paul 32
Parcours de séquences - 1
●
●
extraire l'indice de position et la valeur correspondante
en même temps : utiliser la fonction enumerate()
exemple :
>>> for i,v in enumerate(['tt','yy','aa']):
... print i,v
...
0 tt
1 yy
2 aa
Parcours de séquences - 2
●
●
itération sur plusieurs séquences en même temps : la
fonction zip
exemple :
>>> questions = ['sport','film','dessert']
>>> reponses = ['le tennis','Alien','une pomme']
>>> for q,a in zip(questions,reponses):
... print 'Quel est ton %s favori ? C\'est %s.'% (q,a)
...
Quel est ton sport favori ? C'est le tennis.
Quel est ton film favori ? C'est Alien.
Quel est ton dessert favori ? C'est une pomme.
Parcours de séquences - 3
●
parcours d'une séquence à l'envers: la fonction reversed()
●
exemple :
>>> reponses = ['tennis','Alien','pomme']
>>> for i in reversed(reponses):
... print i
...
pomme
Alien
tennis
Parcours de séquences - 4
●
●
parcours d'une séquence dans un ordre trié : la fonction
sorted()
exemple :
>>> reponses = ['tennis','Alien','pomme']
>>> for i in sorted(reponses):
... print i
...
Alien
pomme
tennis
Trier
●
trier une séquence en ordre croissant par défaut : la
méthode sort()
>>> a = [12,4,3,8,0]
>>> a.sort()
>>> a
[0, 3, 4, 8, 12]
●
trier une séquence en ordre décroissant : le paramètre
booleén reverse
>>> a = [12,4,3,8,0]
>>> a.sort(reverse=True)
>>> a
[12, 8, 4, 3, 0]
Trier avec sa propre fonction de comparaison - 1
●
●
on peut ajouter sa propre fonction de comparaison
comme paramètre de la méthode sort() :
exemple :
>>> def compare(x,y):
... return x - y
...
>>> a = [12,4,3,8,0]
>>> a.sort(compare)
>>> a
[0, 3, 4, 8, 12]
>>> a.sort(compare,reverse=True)
>>> a
[12, 8, 4, 3, 0]
Trier avec sa propre fonction de comparaison - 2
●
●
rendre sa fonction de comparaison anonyme: les formes
lambda
exemple:
>>> a = [12,4,3,8,0]
>>> a.sort(lambda x,y:x-y)
>>> a
[0, 3, 4, 8, 12]
cmp
●
cmp : fonction de comparaison par défaut de sort()
●
exemples :
–
entiers
>>> cmp(2,9)
-1
–
string
>>> cmp('aba','aaa')
1
Trier par clés
●
●
le paramètre key de la méthode sort() permet de :
–
associer une clé à chaque élément de la séquence
–
trier la séquence par rapport à cette clé
exemple : tri insensible à la casse
>>> s = ['avion','Paul','pierre','la','Pierre']
>>> s.sort()
>>> s
['Paul', 'Pierre', 'avion', 'la', 'pierre']
>>> s.sort(key=str.lower)
>>> s
['avion', 'la', 'Paul', 'Pierre', 'pierre']

Documents pareils