• Aucun résultat trouvé

Introduction `a l’algorithmique et `a la programmation

N/A
N/A
Protected

Academic year: 2022

Partager "Introduction `a l’algorithmique et `a la programmation"

Copied!
129
0
0

Texte intégral

(1)

Introduction `a l’algorithmique et `a la programmation

SHNU, 2019 – 2020

Anthony Labarre

Anthony.Labarre@u-pem.fr

– Cours 3 –

(2)

– Clarifications sur les fonctions –

I

Rappel : on ne d ´eclare pas une fonction bar() dans une fonction foo() !

I

Si vous le faites, seule la fonction foo() connaˆıt la fonction bar() :

Exemple ( `a ne pas faire)

>>> def foo():

... def bar():

... return "valeur de bar"

... return bar() ...

>>> foo()

'valeur de bar'

>>> bar()

(3)

– Clarifications sur les fonctions –

I

Ecrivez plut ˆot ceci : Exemple ( `a faire)

>>> def bar():

... return "valeur de bar"

...

>>> def foo():

... return bar() ...

>>> foo()

'valeur de bar'

>>> bar()

'valeur de bar'

(4)

– Plan d’aujourd’hui –

La boucle while

Structures de donn ´ees en Python Les ensembles

Les dictionnaires Slices

It ´erables en compr ´ehension

(5)

Python pas `a pas

La boucle while

(6)

– Boucle while

I

On a d ´ej `a vu une instruction de boucle : la boucle for ;

Syntaxe du for (≡ ∀ element ∈ iterable)

for element in iterable:

# instruction 1 du for

# instruction 2 du for

# ...

# suite du programme

I

Elle n’est h ´elas pas toujours utilisable ; par exemple :

I

quand on n’a pas d’it ´erable `a parcourir ;

I

quand on veut faire une boucle “infinie” ;

I

quand on ignore combien d’it ´erations seront n ´ecessaires ; .. .

I

Dans ces cas-l `a, on utilise une boucle while ;

(7)

– Boucle while

I

On a d ´ej `a vu une instruction de boucle : la boucle for ; Syntaxe du for (≡ ∀ element ∈ iterable)

for element in iterable:

# instruction 1 du for

# instruction 2 du for

# ...

# suite du programme

I

Elle n’est h ´elas pas toujours utilisable ; par exemple :

I

quand on n’a pas d’it ´erable `a parcourir ;

I

quand on veut faire une boucle “infinie” ;

I

quand on ignore combien d’it ´erations seront n ´ecessaires ; .. .

I

Dans ces cas-l `a, on utilise une boucle while ;

(8)

– Boucle while

I

On a d ´ej `a vu une instruction de boucle : la boucle for ; Syntaxe du for (≡ ∀ element ∈ iterable)

for element in iterable:

# instruction 1 du for

# instruction 2 du for

# ...

# suite du programme

I

Elle n’est h ´elas pas toujours utilisable ; par exemple :

I

quand on n’a pas d’it ´erable `a parcourir ;

I

quand on veut faire une boucle “infinie” ;

I

quand on ignore combien d’it ´erations seront n ´ecessaires ; .. .

I

Dans ces cas-l `a, on utilise une boucle while ;

(9)

– Boucle while

I

On a d ´ej `a vu une instruction de boucle : la boucle for ; Syntaxe du for (≡ ∀ element ∈ iterable)

for element in iterable:

# instruction 1 du for

# instruction 2 du for

# ...

# suite du programme

I

Elle n’est h ´elas pas toujours utilisable ; par exemple :

I

quand on n’a pas d’it ´erable `a parcourir ;

I

quand on veut faire une boucle “infinie” ;

I

quand on ignore combien d’it ´erations seront n ´ecessaires ; .. .

I

Dans ces cas-l `a, on utilise une boucle while ;

(10)

– Boucle while

I

On a d ´ej `a vu une instruction de boucle : la boucle for ; Syntaxe du for (≡ ∀ element ∈ iterable)

for element in iterable:

# instruction 1 du for

# instruction 2 du for

# ...

# suite du programme

I

Elle n’est h ´elas pas toujours utilisable ; par exemple :

I

quand on n’a pas d’it ´erable `a parcourir ;

I

quand on veut faire une boucle “infinie” ;

I

quand on ignore combien d’it ´erations seront n ´ecessaires ; .. .

I

Dans ces cas-l `a, on utilise une boucle while ;

(11)

– Boucle while

I

On a d ´ej `a vu une instruction de boucle : la boucle for ; Syntaxe du for (≡ ∀ element ∈ iterable)

for element in iterable:

# instruction 1 du for

# instruction 2 du for

# ...

# suite du programme

I

Elle n’est h ´elas pas toujours utilisable ; par exemple :

I

quand on n’a pas d’it ´erable `a parcourir ;

I

quand on veut faire une boucle “infinie” ;

I

quand on ignore combien d’it ´erations seront n ´ecessaires ; .. .

I

Dans ces cas-l `a, on utilise une boucle while ;

(12)

– Boucle while

I

On a d ´ej `a vu une instruction de boucle : la boucle for ; Syntaxe du for (≡ ∀ element ∈ iterable)

for element in iterable:

# instruction 1 du for

# instruction 2 du for

# ...

# suite du programme

I

Elle n’est h ´elas pas toujours utilisable ; par exemple :

I

quand on n’a pas d’it ´erable `a parcourir ;

I

quand on veut faire une boucle “infinie” ;

I

quand on ignore combien d’it ´erations seront n ´ecessaires ;

.. .

(13)

– Structure de la boucle while

I

La structure de la boucle while se pr ´esente comme suit : Syntaxe du while

while condition:

# instruction 1

# instruction 2

# ...

# suite

Organigramme

condition vraie ?

instructions

suite non

oui

I

On peut toujours remplacer un for par un while, mais c’est plus compliqu ´e ;

I

Attention : c’est `a vous de vous assurer que la boucle se

termine !

(14)

– Deux exemples –

Exemple (dix.py)

if __name__

== "__main__":

nbr =

int(input('Combien ? '))

i = 1

while

i <= nbr:

print('bonjour')

i = i + 1

print('Fini !')

Exemple (boom.py)

from time import

sleep

if __name__

== "__main__":

nbr =

int(input('Combien de secondes ? '))

i = nbr

while

i > 0:

print(str(i)

+ '...') sleep(1)

i = i - 1

print('BOOOM !')

(15)

– Deux exemples –

Exemple (dix.py)

if __name__

== "__main__":

nbr =

int(input('Combien ? '))

i = 1

while

i <= nbr:

print('bonjour')

i = i + 1

print('Fini !')

Exemple (boom.py)

from time import

sleep

if __name__

== "__main__":

nbr =

int(input('Combien de secondes ? '))

i = nbr

while

i > 0:

print(str(i)

+ '...') sleep(1)

i = i - 1

(16)

– Nombre d’it ´erations non fix ´e –

Le while est surtout utile quand on ne sait pas combien d’it ´erations seront n ´ecessaires :

Exemple (forcer l’utilisateur `a respecter les bornes)

if __name__

== "__main__":

a =

int(input('Nombre entre 1 et 10 : ')) while

a < 1

or

a > 10:

a =

int(input('Erreur, entre 1 et 10 :')) print('Bravo, votre nombre est '

+

str(a))

Exemple (lancer deux d ´es pour obtenir 12)

from random import

randint

if __name__

== "__main__":

des = 0 nbr = 0

while

des != 12:

des = randint(1, 6) + randint(1, 6) nbr = nbr + 1

print(nbr,

'tirages pour faire 12')

(17)

– Nombre d’it ´erations non fix ´e –

Le while est surtout utile quand on ne sait pas combien d’it ´erations seront n ´ecessaires :

Exemple (forcer l’utilisateur `a respecter les bornes)

if __name__

== "__main__":

a =

int(input('Nombre entre 1 et 10 : ')) while

a < 1

or

a > 10:

a =

int(input('Erreur, entre 1 et 10 :')) print('Bravo, votre nombre est '

+

str(a))

Exemple (lancer deux d ´es pour obtenir 12)

from random import

randint

if __name__

== "__main__":

des = 0 nbr = 0

while

des != 12:

des = randint(1, 6) + randint(1, 6) nbr = nbr + 1

print(nbr,

'tirages pour faire 12')

(18)

– Nombre d’it ´erations non fix ´e –

Le while est surtout utile quand on ne sait pas combien d’it ´erations seront n ´ecessaires :

Exemple (forcer l’utilisateur `a respecter les bornes)

if __name__

== "__main__":

a =

int(input('Nombre entre 1 et 10 : ')) while

a < 1

or

a > 10:

a =

int(input('Erreur, entre 1 et 10 :')) print('Bravo, votre nombre est '

+

str(a))

Exemple (lancer deux d ´es pour obtenir 12)

from random import

randint

if __name__

== "__main__":

des = 0 nbr = 0

while

des != 12:

(19)

– Un exemple avec break (trouver.py) –

I

break et continue marchent aussi avec while : Exemple (deviner un nombre)

from random import

randint

if __name__

== "__main__":

de = randint(1, 100)

while True:

a =

int(input('Devinez un nombre (1-100) : ')) if

a == de:

break if

a < de:

print('trop petit') if

a > de:

print('trop grand') print('Bravo !')

I

while True boucle ind ´efiniment ;

(20)

– Boucles infinies –

Si la condition de boucle est toujours vraie, et qu’il n’y a pas de break pour en sor- tir, le programme reste bloqu ´e en tournant ind ´efiniment dans la boucle !

I

Pour forcer l’arr ˆet d’un programme dans le terminal ou l’interpr ´eteur : faire Ctrl+C ;

I

Pour forcer la fermeture : faire Ctrl+D ;

(21)

– Evaluation des conditions –

I

Quel programme effectue le moins de calculs ?

# L est une liste for

i

in range(len(L)):

print(L[i])

# L est une liste

i = 0

while

i <

len(L):

print(L[i])

i += 1

I

La condition du while est ´evalu ´ee `a chaque d ´ebut d’it ´eration ...

I

... et len(L) est donc appel ´ee `a chaque ´evaluation ;

I

Si len(L) ne change pas, on ´ecrira la version avec while comme ceci :

# L est une liste

i = 0

n =

len(L) while

i < n:

print(L[i])

i += 1

(22)

– Evaluation des conditions –

I

Quel programme effectue le moins de calculs ?

# L est une liste for

i

in range(len(L)):

print(L[i])

# L est une liste

i = 0

while

i <

len(L):

print(L[i])

i += 1

I

La condition du while est ´evalu ´ee `a chaque d ´ebut d’it ´eration ...

I

... et len(L) est donc appel ´ee `a chaque ´evaluation ;

I

Si len(L) ne change pas, on ´ecrira la version avec while comme ceci :

# L est une liste

i = 0

n =

len(L) while

i < n:

print(L[i])

i += 1

(23)

– Evaluation des conditions –

I

Quel programme effectue le moins de calculs ?

# L est une liste for

i

in range(len(L)):

print(L[i])

# L est une liste

i = 0

while

i <

len(L):

print(L[i])

i += 1

I

La condition du while est ´evalu ´ee `a chaque d ´ebut d’it ´eration ...

I

... et len(L) est donc appel ´ee `a chaque ´evaluation ;

I

Si len(L) ne change pas, on ´ecrira la version avec while comme ceci :

# L est une liste

i = 0

n =

len(L) while

i < n:

print(L[i])

i += 1

(24)

– Evaluation des conditions –

I

Quel programme effectue le moins de calculs ?

# L est une liste for

i

in range(len(L)):

print(L[i])

# L est une liste

i = 0

while

i <

len(L):

print(L[i])

i += 1

I

La condition du while est ´evalu ´ee `a chaque d ´ebut d’it ´eration ...

I

... et len(L) est donc appel ´ee `a chaque ´evaluation ;

I

Si len(L) ne change pas, on ´ecrira la version avec while comme ceci :

# L est une liste

i = 0

n =

len(L)

(25)

– Modification d’it ´erables –

Comme len(L) n’est ´evalu ´e qu’une seule fois dans le for , on aura des probl `emes si l’on tente de modifier L :

>>> lst = [1, 2, 3]

>>>

for

i

in range(len(lst)):

... lst.pop(i) ...

1 3

Traceback (most recent call last):

File "<stdin>", line 2,

in

<module>

IndexError: pop index out of range

NE MODIFIEZ JAMAIS LA TAILLE D’UN

IT ´ ERABLE SUR LEQUEL VOUS UTILISEZ

UNE BOUCLE for !

(26)

Python pas `a pas

Structures de donn ´ees en Python

(27)

– Structures de donn ´ees en Python –

I

On a d ´ej `a vu des it ´erables modifiables (list) ou non (str, tuple) ;

I

On va voir des structures plus avanc ´ees aujourd’hui ;

I

Le choix de la structure d ´ependra de vos besoins ;

I

l’ordre est-il important ?

I

veut-on autoriser les doublons ?

I

a-t-on besoin d’indices ?

I

a-t-on besoin de modifier les ´el ´ements ?

I

...

I

On verra les structures les plus utilis ´ees aujourd’hui, mais

il en existe beaucoup d’autres (voir par exemple le module

collections ) ;

(28)

– Structures de donn ´ees en Python –

I

On a d ´ej `a vu des it ´erables modifiables (list) ou non (str, tuple) ;

I

On va voir des structures plus avanc ´ees aujourd’hui ;

I

Le choix de la structure d ´ependra de vos besoins ;

I

l’ordre est-il important ?

I

veut-on autoriser les doublons ?

I

a-t-on besoin d’indices ?

I

a-t-on besoin de modifier les ´el ´ements ?

I

...

I

On verra les structures les plus utilis ´ees aujourd’hui, mais

il en existe beaucoup d’autres (voir par exemple le module

collections ) ;

(29)

– Structures de donn ´ees en Python –

I

On a d ´ej `a vu des it ´erables modifiables (list) ou non (str, tuple) ;

I

On va voir des structures plus avanc ´ees aujourd’hui ;

I

Le choix de la structure d ´ependra de vos besoins ;

I

l’ordre est-il important ?

I

veut-on autoriser les doublons ?

I

a-t-on besoin d’indices ?

I

a-t-on besoin de modifier les ´el ´ements ?

I

...

I

On verra les structures les plus utilis ´ees aujourd’hui, mais

il en existe beaucoup d’autres (voir par exemple le module

collections ) ;

(30)

– Structures de donn ´ees en Python –

I

On a d ´ej `a vu des it ´erables modifiables (list) ou non (str, tuple) ;

I

On va voir des structures plus avanc ´ees aujourd’hui ;

I

Le choix de la structure d ´ependra de vos besoins ;

I

l’ordre est-il important ?

I

veut-on autoriser les doublons ?

I

a-t-on besoin d’indices ?

I

a-t-on besoin de modifier les ´el ´ements ?

I

...

I

On verra les structures les plus utilis ´ees aujourd’hui, mais

il en existe beaucoup d’autres (voir par exemple le module

collections ) ;

(31)

– Structures de donn ´ees en Python –

I

On a d ´ej `a vu des it ´erables modifiables (list) ou non (str, tuple) ;

I

On va voir des structures plus avanc ´ees aujourd’hui ;

I

Le choix de la structure d ´ependra de vos besoins ;

I

l’ordre est-il important ?

I

veut-on autoriser les doublons ?

I

a-t-on besoin d’indices ?

I

a-t-on besoin de modifier les ´el ´ements ?

I

...

I

On verra les structures les plus utilis ´ees aujourd’hui, mais

il en existe beaucoup d’autres (voir par exemple le module

collections ) ;

(32)

– Structures de donn ´ees en Python –

I

On a d ´ej `a vu des it ´erables modifiables (list) ou non (str, tuple) ;

I

On va voir des structures plus avanc ´ees aujourd’hui ;

I

Le choix de la structure d ´ependra de vos besoins ;

I

l’ordre est-il important ?

I

veut-on autoriser les doublons ?

I

a-t-on besoin d’indices ?

I

a-t-on besoin de modifier les ´el ´ements ?

I

...

I

On verra les structures les plus utilis ´ees aujourd’hui, mais

il en existe beaucoup d’autres (voir par exemple le module

collections ) ;

(33)

– Structures de donn ´ees en Python –

I

On a d ´ej `a vu des it ´erables modifiables (list) ou non (str, tuple) ;

I

On va voir des structures plus avanc ´ees aujourd’hui ;

I

Le choix de la structure d ´ependra de vos besoins ;

I

l’ordre est-il important ?

I

veut-on autoriser les doublons ?

I

a-t-on besoin d’indices ?

I

a-t-on besoin de modifier les ´el ´ements ?

I

...

I

On verra les structures les plus utilis ´ees aujourd’hui, mais

il en existe beaucoup d’autres (voir par exemple le module

collections ) ;

(34)

– Structures de donn ´ees en Python –

I

On a d ´ej `a vu des it ´erables modifiables (list) ou non (str, tuple) ;

I

On va voir des structures plus avanc ´ees aujourd’hui ;

I

Le choix de la structure d ´ependra de vos besoins ;

I

l’ordre est-il important ?

I

veut-on autoriser les doublons ?

I

a-t-on besoin d’indices ?

I

a-t-on besoin de modifier les ´el ´ements ?

I

...

I

On verra les structures les plus utilis ´ees aujourd’hui, mais

il en existe beaucoup d’autres (voir par exemple le module

collections ) ;

(35)

– Structures de donn ´ees en Python –

I

On a d ´ej `a vu des it ´erables modifiables (list) ou non (str, tuple) ;

I

On va voir des structures plus avanc ´ees aujourd’hui ;

I

Le choix de la structure d ´ependra de vos besoins ;

I

l’ordre est-il important ?

I

veut-on autoriser les doublons ?

I

a-t-on besoin d’indices ?

I

a-t-on besoin de modifier les ´el ´ements ?

I

...

I

On verra les structures les plus utilis ´ees aujourd’hui, mais

il en existe beaucoup d’autres (voir par exemple le module

collections ) ;

(36)

Python pas `a pas

Les ensembles

(37)

– Les set

I

Les set sont des it ´erables modifiables repr ´esentant des ensembles ; donc :

1. chaque ´el ´ement ne peut y ˆetre qu’une seule fois ; 2. il n’y a pas d’ordre, donc il n’y a pas de positions ... 3. ... et donc l’op ´erateur [] ne marche pas ;

Les ensembles sont modifiables, mais ne

peuvent contenir que des ´el ´ements non mo-

difiables.

(38)

– Les set

I

Les set sont des it ´erables modifiables repr ´esentant des ensembles ; donc :

1. chaque ´el ´ement ne peut y ˆetre qu’une seule fois ;

2. il n’y a pas d’ordre, donc il n’y a pas de positions ... 3. ... et donc l’op ´erateur [] ne marche pas ;

Les ensembles sont modifiables, mais ne

peuvent contenir que des ´el ´ements non mo-

difiables.

(39)

– Les set

I

Les set sont des it ´erables modifiables repr ´esentant des ensembles ; donc :

1. chaque ´el ´ement ne peut y ˆetre qu’une seule fois ; 2. il n’y a pas d’ordre, donc il n’y a pas de positions ...

3. ... et donc l’op ´erateur [] ne marche pas ;

Les ensembles sont modifiables, mais ne

peuvent contenir que des ´el ´ements non mo-

difiables.

(40)

– Les set

I

Les set sont des it ´erables modifiables repr ´esentant des ensembles ; donc :

1. chaque ´el ´ement ne peut y ˆetre qu’une seule fois ; 2. il n’y a pas d’ordre, donc il n’y a pas de positions ...

3. ... et donc l’op ´erateur [] ne marche pas ;

Les ensembles sont modifiables, mais ne

peuvent contenir que des ´el ´ements non mo-

difiables.

(41)

– Les set

I

Les set sont des it ´erables modifiables repr ´esentant des ensembles ; donc :

1. chaque ´el ´ement ne peut y ˆetre qu’une seule fois ; 2. il n’y a pas d’ordre, donc il n’y a pas de positions ...

3. ... et donc l’op ´erateur [] ne marche pas ;

Les ensembles sont modifiables, mais ne

peuvent contenir que des ´el ´ements non mo-

difiables.

(42)

– Utilisation des set

I

Les set se d ´eclarent comme les listes, mais avec des accolades :

>>> S = {3, 1, 4, 6, 2}

I

Ou `a l’aide de la fonction set(iterable), aussi utile pour le transtypage :

>>> S = set([3, 1, 4, 6, 2])

>>> ensemble_vide = set()

I

Comme ce sont des it ´erables, on peut utiliser in et len

comme pour les chaˆınes, les tuples, les listes, ...

(43)

– Utilisation des set

I

Les set se d ´eclarent comme les listes, mais avec des accolades :

>>> S = {3, 1, 4, 6, 2}

I

Ou `a l’aide de la fonction set(iterable), aussi utile pour le transtypage :

>>> S = set([3, 1, 4, 6, 2])

>>> ensemble_vide = set()

I

Comme ce sont des it ´erables, on peut utiliser in et len

comme pour les chaˆınes, les tuples, les listes, ...

(44)

– Utilisation des set

I

Les set se d ´eclarent comme les listes, mais avec des accolades :

>>> S = {3, 1, 4, 6, 2}

I

Ou `a l’aide de la fonction set(iterable), aussi utile pour le transtypage :

>>> S = set([3, 1, 4, 6, 2])

>>> ensemble_vide = set()

I

Comme ce sont des it ´erables, on peut utiliser in et len

comme pour les chaˆınes, les tuples, les listes, ...

(45)

– Utilisation des set

I

Les set se d ´eclarent comme les listes, mais avec des accolades :

>>> S = {3, 1, 4, 6, 2}

I

Ou `a l’aide de la fonction set(iterable), aussi utile pour le transtypage :

>>> S = set([3, 1, 4, 6, 2])

>>> ensemble_vide = set()

I

Comme ce sont des it ´erables, on peut utiliser in et len

comme pour les chaˆınes, les tuples, les listes, ...

(46)

– Utilisation des set

I

Les set se d ´eclarent comme les listes, mais avec des accolades :

>>> S = {3, 1, 4, 6, 2}

I

Ou `a l’aide de la fonction set(iterable), aussi utile pour le transtypage :

>>> S = set([3, 1, 4, 6, 2])

>>> ensemble_vide = set()

I

Comme ce sont des it ´erables, on peut utiliser in et len

comme pour les chaˆınes, les tuples, les listes, ...

(47)

– Op ´erations ensemblistes –

I

Les op ´erations que vous connaissez sur les ensembles sont disponibles :

math python M ´ethode s ∪ t s | t s.union(t)

s ∩ t s & t s.intersection(t)

s \ t s - t s.difference(t)

s∆t s ˆ t s.symmetric_difference(t)

I

Ces m ´ethodes ne modifient ni s, ni t ; si c’est votre but : Op ´eration M ´ethode

s = s | t s.update(t)

s = s & t s.intersection_update(t)

s = s - t s.difference_update(t)

s = s ˆ t s.symmetric_difference_update(t)

(48)

– Op ´erations ensemblistes –

I

Les op ´erations que vous connaissez sur les ensembles sont disponibles :

math python M ´ethode s ∪ t s | t s.union(t)

s ∩ t s & t s.intersection(t)

s \ t s - t s.difference(t)

s∆t s ˆ t s.symmetric_difference(t)

I

Ces m ´ethodes ne modifient ni s, ni t ; si c’est votre but : Op ´eration M ´ethode

s = s | t s.update(t)

s = s & t s.intersection_update(t)

(49)

– Autres m ´ethodes modifiant les ensembles –

I

Les autres m ´ethodes suivantes permettent de modifier les ensembles :

I

s.add(x) ajoute x `a s ;

I

s.remove(x) retire x de s si s le contient — sinon, elle provoque une erreur ;

I

s.discard(x) retire x de s sans erreur si s ne le contient pas.

I

enfin, s.pop() (sans param `etre) retire et renvoie un

´el ´ement al ´eatoire de s s’il n’est pas vide — sinon, elle

provoque une erreur.

(50)

– Comparaison d’ensembles –

I

On peut aussi comparer les ensembles `a l’aide des op ´erateurs suivants :

math python

s = t s == t

s 6= t s != t

s ⊂ t s < t

s ⊆ t s <= t

s ⊃ t s > t

s ⊇ t s >= t

(51)

frozenset

I

Les frozenset sont des ensembles non-modifiables ;

I

Ils sont principalement utiles quand on veut repr ´esenter des collections d’ensembles ;

Exemple (sous-ensembles de {1, 2, 3} de taille 2)

>>>

S =

set([{1,

2}, {1, 3}, {2, 3}])

Traceback (most recent call last):

File

"<stdin>", line

1, in <module>

TypeError: unhashable type: 'set'

>>>

S =

set([frozenset([1,

2]),

frozenset([1,

3]),

frozenset([2, 3])])

>>>

S

{frozenset({1, 3}), frozenset({1, 2}), frozenset({2, 3})}

(52)

frozenset

I

Les frozenset sont des ensembles non-modifiables ;

I

Ils sont principalement utiles quand on veut repr ´esenter des collections d’ensembles ;

Exemple (sous-ensembles de {1, 2, 3} de taille 2)

>>>

S =

set([{1,

2}, {1, 3}, {2, 3}])

Traceback (most recent call last):

File

"<stdin>", line

1, in <module>

TypeError: unhashable type: 'set'

>>>

S =

set([frozenset([1,

2]),

frozenset([1,

3]),

frozenset([2, 3])])

>>>

S

{frozenset({1, 3}), frozenset({1, 2}), frozenset({2, 3})}

(53)

frozenset

I

Les frozenset sont des ensembles non-modifiables ;

I

Ils sont principalement utiles quand on veut repr ´esenter des collections d’ensembles ;

Exemple (sous-ensembles de {1, 2, 3} de taille 2)

>>>

S =

set([{1,

2}, {1, 3}, {2, 3}])

Traceback (most recent call last):

File

"<stdin>", line

1, in <module>

TypeError: unhashable type: 'set'

>>>

S =

set([frozenset([1,

2]),

frozenset([1,

3]),

frozenset([2, 3])])

>>>

S

{frozenset({1, 3}), frozenset({1, 2}), frozenset({2, 3})}

(54)

– Test d’efficacit ´e –

I

Autre int ´er ˆet des set : beaucoup plus rapides que les listes !

I

Dans le programme ci-dessous :

I

on cr ´ee un it ´erable S contenant {0, 1, 2, . . ., n − 1} ;

I

on cherche ensuite i dans S pour i = 0, 1, 2, . . . , n − 1 ;

I

on compare le temps total mis pour les recherches ;

$ python3 rechercheiterables.py

Temps pour 40000 recherches dans un set: 0.0019 s Temps pour 40000 recherches dans une list: 7.1033 s Temps pour 40000 recherches dans un tuple: 7.1092 s Temps pour 40000 recherches dans un frozenset: 0.0016 s

I

⇒ si vous n’avez pas besoin de doublons, d’ordre ou de

positions : les set sont pr ´ef ´erables ;

(55)

– Test d’efficacit ´e –

I

Autre int ´er ˆet des set : beaucoup plus rapides que les listes !

I

Dans le programme ci-dessous :

I

on cr ´ee un it ´erable S contenant {0, 1, 2, . . ., n − 1} ;

I

on cherche ensuite i dans S pour i = 0, 1, 2, . . . , n − 1 ;

I

on compare le temps total mis pour les recherches ;

$ python3 rechercheiterables.py

Temps pour 40000 recherches dans un set: 0.0019 s Temps pour 40000 recherches dans une list: 7.1033 s Temps pour 40000 recherches dans un tuple: 7.1092 s Temps pour 40000 recherches dans un frozenset: 0.0016 s

I

⇒ si vous n’avez pas besoin de doublons, d’ordre ou de

positions : les set sont pr ´ef ´erables ;

(56)

– Test d’efficacit ´e –

I

Autre int ´er ˆet des set : beaucoup plus rapides que les listes !

I

Dans le programme ci-dessous :

I

on cr ´ee un it ´erable S contenant {0, 1, 2, . . ., n − 1} ;

I

on cherche ensuite i dans S pour i = 0, 1, 2, . . . , n − 1 ;

I

on compare le temps total mis pour les recherches ;

$ python3 rechercheiterables.py

Temps pour 40000 recherches dans un set: 0.0019 s Temps pour 40000 recherches dans une list: 7.1033 s Temps pour 40000 recherches dans un tuple: 7.1092 s Temps pour 40000 recherches dans un frozenset: 0.0016 s

I

⇒ si vous n’avez pas besoin de doublons, d’ordre ou de

positions : les set sont pr ´ef ´erables ;

(57)

– Test d’efficacit ´e –

I

Autre int ´er ˆet des set : beaucoup plus rapides que les listes !

I

Dans le programme ci-dessous :

I

on cr ´ee un it ´erable S contenant {0, 1, 2, . . ., n − 1} ;

I

on cherche ensuite i dans S pour i = 0, 1, 2, . . . , n − 1 ;

I

on compare le temps total mis pour les recherches ;

$ python3 rechercheiterables.py

Temps pour 40000 recherches dans un set: 0.0019 s Temps pour 40000 recherches dans une list: 7.1033 s Temps pour 40000 recherches dans un tuple: 7.1092 s Temps pour 40000 recherches dans un frozenset: 0.0016 s

I

⇒ si vous n’avez pas besoin de doublons, d’ordre ou de

positions : les set sont pr ´ef ´erables ;

(58)

– Test d’efficacit ´e –

I

Autre int ´er ˆet des set : beaucoup plus rapides que les listes !

I

Dans le programme ci-dessous :

I

on cr ´ee un it ´erable S contenant {0, 1, 2, . . ., n − 1} ;

I

on cherche ensuite i dans S pour i = 0, 1, 2, . . . , n − 1 ;

I

on compare le temps total mis pour les recherches ;

$ python3 rechercheiterables.py

Temps pour 40000 recherches dans un set: 0.0019 s Temps pour 40000 recherches dans une list: 7.1033 s Temps pour 40000 recherches dans un tuple: 7.1092 s Temps pour 40000 recherches dans un frozenset: 0.0016 s

I

⇒ si vous n’avez pas besoin de doublons, d’ordre ou de

positions : les set sont pr ´ef ´erables ;

(59)

– Test d’efficacit ´e –

I

Autre int ´er ˆet des set : beaucoup plus rapides que les listes !

I

Dans le programme ci-dessous :

I

on cr ´ee un it ´erable S contenant {0, 1, 2, . . ., n − 1} ;

I

on cherche ensuite i dans S pour i = 0, 1, 2, . . . , n − 1 ;

I

on compare le temps total mis pour les recherches ;

$ python3 rechercheiterables.py

Temps pour 40000 recherches dans un set: 0.0019 s Temps pour 40000 recherches dans une list: 7.1033 s Temps pour 40000 recherches dans un tuple: 7.1092 s Temps pour 40000 recherches dans un frozenset: 0.0016 s

I

⇒ si vous n’avez pas besoin de doublons, d’ordre ou de

positions : les set sont pr ´ef ´erables ;

(60)

– Test d’efficacit ´e –

I

Autre int ´er ˆet des set : beaucoup plus rapides que les listes !

I

Dans le programme ci-dessous :

I

on cr ´ee un it ´erable S contenant {0, 1, 2, . . ., n − 1} ;

I

on cherche ensuite i dans S pour i = 0, 1, 2, . . . , n − 1 ;

I

on compare le temps total mis pour les recherches ;

$ python3 rechercheiterables.py

Temps pour 40000 recherches dans un set: 0.0019 s

Temps pour 40000 recherches dans une list: 7.1033 s

Temps pour 40000 recherches dans un tuple: 7.1092 s

Temps pour 40000 recherches dans un frozenset: 0.0016 s

(61)

Python pas `a pas

Les dictionnaires

(62)

– Dictionnaires –

I

Les dictionnaires sont comme les listes, mais :

1. les indices peuvent ˆetre autre chose que des naturels ; 2. il n’y a pas d’ordre ;

I

Ces indices sont appel ´es des cl ´es, et on leur associe des valeurs ;

I

On peut les d ´eclarer avec la syntaxe suivante :

clients = {

"Jean Dupont": "19/01/1985",

"Anne Dubois": "27/04/1966" }

cl ´es valeurs

(63)

– Dictionnaires –

I

Les dictionnaires sont comme les listes, mais : 1. les indices peuvent ˆetre autre chose que des naturels ;

2. il n’y a pas d’ordre ;

I

Ces indices sont appel ´es des cl ´es, et on leur associe des valeurs ;

I

On peut les d ´eclarer avec la syntaxe suivante :

clients = {

"Jean Dupont": "19/01/1985",

"Anne Dubois": "27/04/1966" }

cl ´es valeurs

(64)

– Dictionnaires –

I

Les dictionnaires sont comme les listes, mais : 1. les indices peuvent ˆetre autre chose que des naturels ; 2. il n’y a pas d’ordre ;

I

Ces indices sont appel ´es des cl ´es, et on leur associe des valeurs ;

I

On peut les d ´eclarer avec la syntaxe suivante :

clients = {

"Jean Dupont": "19/01/1985",

"Anne Dubois": "27/04/1966" }

cl ´es valeurs

(65)

– Dictionnaires –

I

Les dictionnaires sont comme les listes, mais : 1. les indices peuvent ˆetre autre chose que des naturels ; 2. il n’y a pas d’ordre ;

I

Ces indices sont appel ´es des cl ´es, et on leur associe des valeurs ;

I

On peut les d ´eclarer avec la syntaxe suivante :

clients = {

"Jean Dupont": "19/01/1985",

"Anne Dubois": "27/04/1966" }

cl ´es valeurs

(66)

– Dictionnaires –

I

Les dictionnaires sont comme les listes, mais : 1. les indices peuvent ˆetre autre chose que des naturels ; 2. il n’y a pas d’ordre ;

I

Ces indices sont appel ´es des cl ´es, et on leur associe des valeurs ;

I

On peut les d ´eclarer avec la syntaxe suivante :

clients = {

"Jean Dupont": "19/01/1985",

"Anne Dubois": "27/04/1966"

}

cl ´es valeurs

(67)

– Dictionnaires –

I

Les dictionnaires sont comme les listes, mais : 1. les indices peuvent ˆetre autre chose que des naturels ; 2. il n’y a pas d’ordre ;

I

Ces indices sont appel ´es des cl ´es, et on leur associe des valeurs ;

I

On peut les d ´eclarer avec la syntaxe suivante :

clients = {

"Jean Dupont": "19/01/1985",

"Anne Dubois": "27/04/1966"

}

cl ´es

valeurs

(68)

– Dictionnaires –

I

Les dictionnaires sont comme les listes, mais : 1. les indices peuvent ˆetre autre chose que des naturels ; 2. il n’y a pas d’ordre ;

I

Ces indices sont appel ´es des cl ´es, et on leur associe des valeurs ;

I

On peut les d ´eclarer avec la syntaxe suivante :

clients = {

"Jean Dupont": "19/01/1985",

"Anne Dubois": "27/04/1966"

}

cl ´es valeurs

(69)

– Dictionnaires : exemple d’utilisation –

Exemple

D =

dict() # dictionnaire vide

D['toto'] = 4

# associe 4 a la cle 'toto'

D['titi'] = 6

print(D['toto']) # affiche 4

D['toto'] = 'bonjour'

# remplace 4 print(D['toto']) # affiche 'bonjour' print(D)

La cl ´e doit ˆetre un ´el ´ement non modifiable

(70)

– Dictionnaires : acc `es aux ´el ´ements –

I

Les m ´ethodes suivantes du dictionnaire dico permettent d’acc ´eder :

1. aux cl ´es : dico.keys() ; 2. aux valeurs : dico.values(); 3. aux deux : dico.items() ;

Exemple

>>> dico = {"une cl´ e": "une valeur",

"une autre cl´ e": "une autre valeur"}

>>> dico.keys()

dict_keys(['une cl´ e', 'une autre cl´ e'])

>>> dico.values()

dict_values(['une valeur', 'une autre valeur'])

>>> dico.items()

dict_items([('une cl´ e', 'une valeur'),

('une autre cl´ e', 'une autre valeur')])

I

Comme toujours, on peut transtyper le r ´esultat ;

(71)

– Dictionnaires : acc `es aux ´el ´ements –

I

Les m ´ethodes suivantes du dictionnaire dico permettent d’acc ´eder :

1. aux cl ´es : dico.keys() ;

2. aux valeurs : dico.values(); 3. aux deux : dico.items() ;

Exemple

>>> dico = {"une cl´ e": "une valeur",

"une autre cl´ e": "une autre valeur"}

>>> dico.keys()

dict_keys(['une cl´ e', 'une autre cl´ e'])

>>> dico.values()

dict_values(['une valeur', 'une autre valeur'])

>>> dico.items()

dict_items([('une cl´ e', 'une valeur'),

('une autre cl´ e', 'une autre valeur')])

I

Comme toujours, on peut transtyper le r ´esultat ;

(72)

– Dictionnaires : acc `es aux ´el ´ements –

I

Les m ´ethodes suivantes du dictionnaire dico permettent d’acc ´eder :

1. aux cl ´es : dico.keys() ; 2. aux valeurs : dico.values() ;

3. aux deux : dico.items() ;

Exemple

>>> dico = {"une cl´ e": "une valeur",

"une autre cl´ e": "une autre valeur"}

>>> dico.keys()

dict_keys(['une cl´ e', 'une autre cl´ e'])

>>> dico.values()

dict_values(['une valeur', 'une autre valeur'])

>>> dico.items()

dict_items([('une cl´ e', 'une valeur'),

('une autre cl´ e', 'une autre valeur')])

I

Comme toujours, on peut transtyper le r ´esultat ;

(73)

– Dictionnaires : acc `es aux ´el ´ements –

I

Les m ´ethodes suivantes du dictionnaire dico permettent d’acc ´eder :

1. aux cl ´es : dico.keys() ; 2. aux valeurs : dico.values() ; 3. aux deux : dico.items() ;

Exemple

>>> dico = {"une cl´ e": "une valeur",

"une autre cl´ e": "une autre valeur"}

>>> dico.keys()

dict_keys(['une cl´ e', 'une autre cl´ e'])

>>> dico.values()

dict_values(['une valeur', 'une autre valeur'])

>>> dico.items()

dict_items([('une cl´ e', 'une valeur'),

('une autre cl´ e', 'une autre valeur')])

I

Comme toujours, on peut transtyper le r ´esultat ;

(74)

– Dictionnaires : acc `es aux ´el ´ements –

I

Les m ´ethodes suivantes du dictionnaire dico permettent d’acc ´eder :

1. aux cl ´es : dico.keys() ; 2. aux valeurs : dico.values() ; 3. aux deux : dico.items() ;

Exemple

>>> dico = {"une cl´ e": "une valeur",

"une autre cl´ e": "une autre valeur"}

>>> dico.keys()

dict_keys(['une cl´ e', 'une autre cl´ e'])

>>> dico.values()

dict_values(['une valeur', 'une autre valeur'])

>>> dico.items()

dict_items([('une cl´ e', 'une valeur'),

I

Comme toujours, on peut transtyper le r ´esultat ;

(75)

– Dictionnaires : acc `es aux ´el ´ements –

I

Les m ´ethodes suivantes du dictionnaire dico permettent d’acc ´eder :

1. aux cl ´es : dico.keys() ; 2. aux valeurs : dico.values() ; 3. aux deux : dico.items() ;

Exemple

>>> dico = {"une cl´ e": "une valeur",

"une autre cl´ e": "une autre valeur"}

>>> dico.keys()

dict_keys(['une cl´ e', 'une autre cl´ e'])

>>> dico.values()

dict_values(['une valeur', 'une autre valeur'])

>>> dico.items()

dict_items([('une cl´ e', 'une valeur'),

('une autre cl´ e', 'une autre valeur')])

Comme toujours, on peut transtyper le r ´esultat ;

(76)

– Parcourir les dictionnaires –

I

On peut it ´erer sur des dictionnaires de plusieurs mani `eres : Exemple

>>> notes_etudiants = {'Jean': 0, 'Marie': 16, 'Pierre': 14}

>>> for nom in notes_etudiants.keys():

... print(nom) ...

Jean Pierre Marie

>>> for nom in notes_etudiants.keys():

... print(nom, ":", notes_etudiants[nom]) ...

Jean : 0 Pierre : 14 Marie : 16

>>> # mˆeme chose mais plus lisible:

>>> for nom, note in notes_etudiants.items():

(77)

– Ajouts et suppressions –

I

On est oblig ´e d’ajouter une cl ´e avec sa valeur, par une simple affectation : D[cle] = valeur

I

Si la cl ´e existait d ´ej `a dans D, son ancienne valeur est remplac ´ee ;

I

Pour supprimer une association, on utilise del D[cle] ;

I

Comme les dictionnaires sont des it ´erables, on peut utiliser :

1. x in D pour savoir si x est une cl ´e de D ;

2. y in D.values() pour savoir si y est une valeur de D ;

3. len(D) pour connaˆıtre le nombre de cl ´es de D ;

(78)

– Ajouts et suppressions –

I

On est oblig ´e d’ajouter une cl ´e avec sa valeur, par une simple affectation : D[cle] = valeur

I

Si la cl ´e existait d ´ej `a dans D, son ancienne valeur est remplac ´ee ;

I

Pour supprimer une association, on utilise del D[cle] ;

I

Comme les dictionnaires sont des it ´erables, on peut utiliser :

1. x in D pour savoir si x est une cl ´e de D ;

2. y in D.values() pour savoir si y est une valeur de D ;

3. len(D) pour connaˆıtre le nombre de cl ´es de D ;

(79)

– Ajouts et suppressions –

I

On est oblig ´e d’ajouter une cl ´e avec sa valeur, par une simple affectation : D[cle] = valeur

I

Si la cl ´e existait d ´ej `a dans D, son ancienne valeur est remplac ´ee ;

I

Pour supprimer une association, on utilise del D[cle] ;

I

Comme les dictionnaires sont des it ´erables, on peut utiliser :

1. x in D pour savoir si x est une cl ´e de D ;

2. y in D.values() pour savoir si y est une valeur de D ;

3. len(D) pour connaˆıtre le nombre de cl ´es de D ;

(80)

– Ajouts et suppressions –

I

On est oblig ´e d’ajouter une cl ´e avec sa valeur, par une simple affectation : D[cle] = valeur

I

Si la cl ´e existait d ´ej `a dans D, son ancienne valeur est remplac ´ee ;

I

Pour supprimer une association, on utilise del D[cle] ;

I

Comme les dictionnaires sont des it ´erables, on peut utiliser :

1. x in D pour savoir si x est une cl ´e de D ;

2. y in D.values() pour savoir si y est une valeur de D ;

3. len(D) pour connaˆıtre le nombre de cl ´es de D ;

(81)

– Ajouts et suppressions –

I

On est oblig ´e d’ajouter une cl ´e avec sa valeur, par une simple affectation : D[cle] = valeur

I

Si la cl ´e existait d ´ej `a dans D, son ancienne valeur est remplac ´ee ;

I

Pour supprimer une association, on utilise del D[cle] ;

I

Comme les dictionnaires sont des it ´erables, on peut utiliser :

1. x in D pour savoir si x est une cl ´e de D ;

2. y in D.values() pour savoir si y est une valeur de D ;

3. len(D) pour connaˆıtre le nombre de cl ´es de D ;

(82)

– Ajouts et suppressions –

I

On est oblig ´e d’ajouter une cl ´e avec sa valeur, par une simple affectation : D[cle] = valeur

I

Si la cl ´e existait d ´ej `a dans D, son ancienne valeur est remplac ´ee ;

I

Pour supprimer une association, on utilise del D[cle] ;

I

Comme les dictionnaires sont des it ´erables, on peut utiliser :

1. x in D pour savoir si x est une cl ´e de D ;

2. y in D.values() pour savoir si y est une valeur de D ;

3. len(D) pour connaˆıtre le nombre de cl ´es de D ;

(83)

– Ajouts et suppressions –

I

On est oblig ´e d’ajouter une cl ´e avec sa valeur, par une simple affectation : D[cle] = valeur

I

Si la cl ´e existait d ´ej `a dans D, son ancienne valeur est remplac ´ee ;

I

Pour supprimer une association, on utilise del D[cle] ;

I

Comme les dictionnaires sont des it ´erables, on peut utiliser :

1. x in D pour savoir si x est une cl ´e de D ;

2. y in D.values() pour savoir si y est une valeur de D ;

3. len(D) pour connaˆıtre le nombre de cl ´es de D ;

(84)

– Modifiables et non-modifiables –

On a vu jusqu’ici des objets de deux cat ´egories :

Types non-modifiables bool, int, float, str, tuple, frozenset

Types modifiables list, set, dict

Pour passer d’un type `a l’autre, on peut par exemple utiliser la

fonction tuple() pour transformer une liste (modifiable) en

un tuple (non-modifiable)

(85)

– Modifiables et non-modifiables –

I

Rappel : attention aux affectations d’objets modifiables !

I

Les fonctions peuvent modifier les objets modifiables, mais attention, les affectations donnent toujours des variables locales !

Exemple

def modifier(lst):

lst.append(1)

# modifie lst

lst =

list() # lst devient une variable LOCALE

# on perd l'acc`es au PARAMETRE lst

lst.append(1)

# modifie lst LOCALE

(86)

Python pas `a pas

Slices

(87)

– Notion de slice –

I

Si t est une chaˆıne, un tuple ou une liste, t[i] donne acc `es `a son i - `eme ´el ´ement ;

I

Les slices permettent d’acc ´eder `a un intervalle de t ;

Syntaxe des slices

Si t est une liste (ou une chaˆıne, ou un tuple), t[debut:fin] donne la sous-liste (ou la sous-chaˆıne, ou le sous-tuple) comprise entre les indices debut et fin-1.

Exemple

>>> s = 'bonjour'

>>> print(s[2:5]) 'njo'

I

Attention :

I

c’est fin-1 comme pour les range ;

I

les “mauvais indices” fonctionnent ;

I

c¸a ne marche pas pour les dictionnaires ;

(88)

– Notion de slice –

I

Si t est une chaˆıne, un tuple ou une liste, t[i] donne acc `es `a son i - `eme ´el ´ement ;

I

Les slices permettent d’acc ´eder `a un intervalle de t ;

Syntaxe des slices

Si t est une liste (ou une chaˆıne, ou un tuple), t[debut:fin] donne la sous-liste (ou la sous-chaˆıne, ou le sous-tuple) comprise entre les indices debut et fin-1.

Exemple

>>> s = 'bonjour'

>>> print(s[2:5]) 'njo'

I

Attention :

I

c’est fin-1 comme pour les range ;

I

les “mauvais indices” fonctionnent ;

I

c¸a ne marche pas pour les dictionnaires ;

(89)

– Notion de slice –

I

Si t est une chaˆıne, un tuple ou une liste, t[i] donne acc `es `a son i - `eme ´el ´ement ;

I

Les slices permettent d’acc ´eder `a un intervalle de t ;

Syntaxe des slices

Si t est une liste (ou une chaˆıne, ou un tuple), t[debut:fin]

donne la sous-liste (ou la sous-chaˆıne, ou le sous-tuple) comprise entre les indices debut et fin-1.

Exemple

>>> s = 'bonjour'

>>> print(s[2:5]) 'njo'

I

Attention :

I

c’est fin-1 comme pour les range ;

I

les “mauvais indices” fonctionnent ;

I

c¸a ne marche pas pour les dictionnaires ;

(90)

– Notion de slice –

I

Si t est une chaˆıne, un tuple ou une liste, t[i] donne acc `es `a son i - `eme ´el ´ement ;

I

Les slices permettent d’acc ´eder `a un intervalle de t ;

Syntaxe des slices

Si t est une liste (ou une chaˆıne, ou un tuple), t[debut:fin]

donne la sous-liste (ou la sous-chaˆıne, ou le sous-tuple) comprise entre les indices debut et fin-1.

Exemple

>>> s = 'bonjour'

>>> print(s[2:5]) 'njo'

I

Attention :

I

c’est fin-1 comme pour les range ;

I

les “mauvais indices” fonctionnent ;

I

c¸a ne marche pas pour les dictionnaires ;

(91)

– Notion de slice –

I

Si t est une chaˆıne, un tuple ou une liste, t[i] donne acc `es `a son i - `eme ´el ´ement ;

I

Les slices permettent d’acc ´eder `a un intervalle de t ;

Syntaxe des slices

Si t est une liste (ou une chaˆıne, ou un tuple), t[debut:fin]

donne la sous-liste (ou la sous-chaˆıne, ou le sous-tuple) comprise entre les indices debut et fin-1.

Exemple

>>> s = 'bonjour'

>>> print(s[2:5]) 'njo'

I

Attention :

I

c’est fin-1 comme pour les range ;

I

les “mauvais indices” fonctionnent ;

I

c¸a ne marche pas pour les dictionnaires ;

(92)

– Notion de slice –

I

Si t est une chaˆıne, un tuple ou une liste, t[i] donne acc `es `a son i - `eme ´el ´ement ;

I

Les slices permettent d’acc ´eder `a un intervalle de t ;

Syntaxe des slices

Si t est une liste (ou une chaˆıne, ou un tuple), t[debut:fin]

donne la sous-liste (ou la sous-chaˆıne, ou le sous-tuple) comprise entre les indices debut et fin-1.

Exemple

>>> s = 'bonjour'

>>> print(s[2:5]) 'njo'

I

Attention :

I

les “mauvais indices” fonctionnent ;

I

c¸a ne marche pas pour les dictionnaires ;

(93)

– Notion de slice –

I

Si t est une chaˆıne, un tuple ou une liste, t[i] donne acc `es `a son i - `eme ´el ´ement ;

I

Les slices permettent d’acc ´eder `a un intervalle de t ;

Syntaxe des slices

Si t est une liste (ou une chaˆıne, ou un tuple), t[debut:fin]

donne la sous-liste (ou la sous-chaˆıne, ou le sous-tuple) comprise entre les indices debut et fin-1.

Exemple

>>> s = 'bonjour'

>>> print(s[2:5]) 'njo'

I

Attention :

I

c’est fin-1 comme pour les range ;

I

les “mauvais indices” fonctionnent ;

I

c¸a ne marche pas pour les dictionnaires ;

(94)

– Notion de slice –

I

Si t est une chaˆıne, un tuple ou une liste, t[i] donne acc `es `a son i - `eme ´el ´ement ;

I

Les slices permettent d’acc ´eder `a un intervalle de t ;

Syntaxe des slices

Si t est une liste (ou une chaˆıne, ou un tuple), t[debut:fin]

donne la sous-liste (ou la sous-chaˆıne, ou le sous-tuple) comprise entre les indices debut et fin-1.

Exemple

>>> s = 'bonjour'

>>> print(s[2:5]) 'njo'

I

Attention :

(95)

– Indices n ´egatifs –

I

Python permet aussi d’utiliser des indices n ´egatifs ;

I

L’indice -i est le m ˆeme que len(t) - i (sauf pour 0) ;

Exemple

0 1 2 3 4 5 6

b o n j o u r

-7 -6 -5 -4 -3 -2 -1

>>> s = 'bonjour'

>>> print(s[-2]) 'u'

>>> print(s[1:-2]) 'onjo'

I

Attention, les m ˆemes r `egles de validit ´e d’indices

s’appliquent (-10 dans une liste de 5 ´el ´ements provoque

une erreur) ;

(96)

– Indices n ´egatifs –

I

Python permet aussi d’utiliser des indices n ´egatifs ;

I

L’indice -i est le m ˆeme que len(t) - i (sauf pour 0) ;

Exemple

0 1 2 3 4 5 6

b o n j o u r

-7 -6 -5 -4 -3 -2 -1

>>> s = 'bonjour'

>>> print(s[-2]) 'u'

>>> print(s[1:-2]) 'onjo'

I

Attention, les m ˆemes r `egles de validit ´e d’indices

s’appliquent (-10 dans une liste de 5 ´el ´ements provoque

une erreur) ;

(97)

– Indices n ´egatifs –

I

Python permet aussi d’utiliser des indices n ´egatifs ;

I

L’indice -i est le m ˆeme que len(t) - i (sauf pour 0) ; Exemple

0 1 2 3 4 5 6

b o n j o u r

-7 -6 -5 -4 -3 -2 -1

>>> s = 'bonjour'

>>> print(s[-2]) 'u'

>>> print(s[1:-2]) 'onjo'

I

Attention, les m ˆemes r `egles de validit ´e d’indices

s’appliquent (-10 dans une liste de 5 ´el ´ements provoque

une erreur) ;

(98)

– Indices n ´egatifs –

I

Python permet aussi d’utiliser des indices n ´egatifs ;

I

L’indice -i est le m ˆeme que len(t) - i (sauf pour 0) ; Exemple

0 1 2 3 4 5 6

b o n j o u r

-7 -6 -5 -4 -3 -2 -1

>>> s = 'bonjour'

>>> print(s[-2]) 'u'

>>> print(s[1:-2])

'onjo'

(99)

– Param `etres par d ´efaut des slices –

I

Dans un slice, le d ´ebut et la fin ont des valeurs par d ´efaut :

I

t[:4] est la m ˆeme chose que t[0:4] ;

I

t[4:] est la m ˆeme chose que t[4:len(t)] ;

I

t[:7] d ´esigne les 7 premiers ´el ´ements ;

I

t[2:] d ´esigne tous les ´el ´ements `a partir du troisi `eme (le premier est en 0) ;

I

t[:-2] d ´esigne tous les ´el ´ements sauf les 2 derniers ;

I

t[-5:] d ´esigne les 5 derniers ´el ´ements ;

I

t[:] d ´esigne toute la liste ;

(100)

– Param `etres par d ´efaut des slices –

I

Dans un slice, le d ´ebut et la fin ont des valeurs par d ´efaut :

I

t[:4] est la m ˆeme chose que t[0:4] ;

I

t[4:] est la m ˆeme chose que t[4:len(t)] ;

I

t[:7] d ´esigne les 7 premiers ´el ´ements ;

I

t[2:] d ´esigne tous les ´el ´ements `a partir du troisi `eme (le premier est en 0) ;

I

t[:-2] d ´esigne tous les ´el ´ements sauf les 2 derniers ;

I

t[-5:] d ´esigne les 5 derniers ´el ´ements ;

I

t[:] d ´esigne toute la liste ;

(101)

– Param `etres par d ´efaut des slices –

I

Dans un slice, le d ´ebut et la fin ont des valeurs par d ´efaut :

I

t[:4] est la m ˆeme chose que t[0:4] ;

I

t[4:] est la m ˆeme chose que t[4:len(t)] ;

I

t[:7] d ´esigne les 7 premiers ´el ´ements ;

I

t[2:] d ´esigne tous les ´el ´ements `a partir du troisi `eme (le premier est en 0) ;

I

t[:-2] d ´esigne tous les ´el ´ements sauf les 2 derniers ;

I

t[-5:] d ´esigne les 5 derniers ´el ´ements ;

I

t[:] d ´esigne toute la liste ;

(102)

– Param `etres par d ´efaut des slices –

I

Dans un slice, le d ´ebut et la fin ont des valeurs par d ´efaut :

I

t[:4] est la m ˆeme chose que t[0:4] ;

I

t[4:] est la m ˆeme chose que t[4:len(t)] ;

I

t[:7] d ´esigne les 7 premiers ´el ´ements ;

I

t[2:] d ´esigne tous les ´el ´ements `a partir du troisi `eme (le premier est en 0) ;

I

t[:-2] d ´esigne tous les ´el ´ements sauf les 2 derniers ;

I

t[-5:] d ´esigne les 5 derniers ´el ´ements ;

I

t[:] d ´esigne toute la liste ;

(103)

– Param `etres par d ´efaut des slices –

I

Dans un slice, le d ´ebut et la fin ont des valeurs par d ´efaut :

I

t[:4] est la m ˆeme chose que t[0:4] ;

I

t[4:] est la m ˆeme chose que t[4:len(t)] ;

I

t[:7] d ´esigne les 7 premiers ´el ´ements ;

I

t[2:] d ´esigne tous les ´el ´ements `a partir du troisi `eme (le premier est en 0) ;

I

t[:-2] d ´esigne tous les ´el ´ements sauf les 2 derniers ;

I

t[-5:] d ´esigne les 5 derniers ´el ´ements ;

I

t[:] d ´esigne toute la liste ;

Références

Documents relatifs

Les valeurs contenues dans la pile sont retenues dans une liste li´ee. L’op´eration push place la valeur en tˆete

Consid´ erons un algorithme de complexit´ e f (n) qui permette de r´ esoudre en une heure les instances de taille X d’un probl` eme sur un ordinateur aujourd’hui.. Alors un

Dans cette section nous proposons de d´ evelopper un mod` ele analytique d’imp´ edance acoustique d’un panneau sandwich compos´ e d’une plaque en nid d’abeille sur la- quelle

les [] : indique que la variable est de type tableau Toutes les valeurs des cases du tableau sont donn´ ees en

b - Ecrire une fonction carres qui affiche une ligne de carr´ es dont les intensit´ es de couleurs rouges, bleues et vertes sont contenues dans trois tableaux d’entier de mˆ

[r]

Ecrire en Java la gestion d’un tas, repr´esent´e par un tableau : cr´eer, ins´erer, minimum, supprimer (le minimum), modifier une valeur.. Vous programmerez ceci en TP, et

On fixe une cat´ egorie C et on prend comme objets les couples (R, M ) d’une monade R sur C et d’un R-module M. Que peut-on prendre comme morphismes pour faire une cat´