Séquences : listes et tuples Définition dune liste. Opérations sur les listes. Fonctions permettant de manipuler les listes. Instruction for. Tuples. Exemples dapplication. Copies superficielles et en profondeur.
2 Les listes Les listes permettent de stocker séquentiellement des données quelconques et dutiliser des indices pour accéder à des éléments isolés ou consécutifs. Contrairement aux chaînes, les listes peuvent être modifiées. Les listes peuvent renfermer des données de différents types. Elles peuvent être remplies, vidées, triées et inversées. On peut les allonger et les réduire, les décomposer et les assembler à dautres listes. Elles permettent dinsérer, de modifier ou de supprimer à volonté un ou plusieurs de leurs éléments. Les tuples Les tuples partagent plusieurs des caractéristiques des listes. La principale différence réside dans le fait quils sont accessibles en lecture seulement, cest-à-dire les opérateurs et les fonctions permettant de mettre à jour les listes ne seront pas valides pour les tuples.
3 Création et affectation dune liste Une collection déléments séparés par des virgules, lensemble étant enfermé dans des crochets. Ex.: >>> jour = ['lundi', 'mardi', 3, 4, 'vendredi', 'samedi', 7] >>> print jour ['lundi', 'mardi', 3, 4, 'vendredi', 'samedi', 7] Les éléments qui constituent une liste peuvent être de types variés, voire même des listes. >>> voyelles = ['a', 'e', 'i', 'o', 'u', 'y'] >>> consonnes = [] >>> print voyelles ['a', 'e', 'i', 'o', 'u', 'y'] >>> print consonnes [] >>> saisons = [1, "printemps", 2, "ete", 3, "automne", 4, "hiver"] >>> print saisons [1, "printemps", 2, "ete", 3, "automne", 4, "hiver"] >>> saisons = [[1, 2, 3, 4], ["printemps", "ete", "automne", "hiver"]] >>> print saisons [[1, 2, 3, 4], ['printemps', 'ete', 'automne', 'hiver']] Ex. : Liste vide
4 Accès à un élément dune liste Les listes sont des collections ordonnées de données et lon peut accéder à chacune dentre elles individuellement si lon connaît leur position dans la liste (la position des données commence à zéro). Ex. :>>> jour = ['lundi', 'mardi', 3, 4, 'vendredi', 'samedi', 7] >>> print jour[2], jour[4] 3 vendredi Le découpage fonctionne comme pour les chaînes : on utilise lopérateur [ ] avec lindice approprié. >>> saisons = [1, "printemps", 2, "ete", 3, "automne", 4, "hiver"] >>> print saisons [1, 'printemps', 2, 'ete', 3, 'automne', 4, 'hiver'] >>> saisons = [[1, 2, 3, 4], ["printemps", "ete", "automne", "hiver"]] >>> print saisons[1] ['printemps', 'ete', 'automne', 'hiver'] >>> print saisons[1][1] ete Ex. : Modification dun élément dune liste Il est possible de changer un élément individuel dune liste contrairement aux chaînes de caractères.
5 Suppression dun élément dune liste La fonction del() supprime un élément dune liste à partir de sa position tandis que la méthode remove() recherche la 1 ière occurrence dune valeur à enlever pour la supprimer. Ex.:>>> del(jour[6]) >>> print jour ['lundi', 'mardi', 2, 'jeudi', 'vendredi', 'samedi'] >>> jour.remove(2) >>> print jour ['lundi', 'mardi', 'jeudi', 'vendredi', 'samedi'] >>> Voyelles = ['a', 'e', 'i', 'o', 'u', 'y', ['A', 'E', 'I', 'O', 'U', 'Y']] >>> Voyelles[-1][0], Voyelles[-7] = 'a', 'A' >>> print Voyelles ['A', 'e', 'i', 'o', 'u', 'y', ['a', 'E', 'I', 'O', 'U', 'Y']] Une liste dans une liste Ex. : Ex.:>>> jour = ['lundi', 'mardi', 3, 4, 'vendredi', 'samedi', 7] >>> jour[2] -= 1 >>> jour[3] = 'jeudi' >>> print jour ['lundi', 'mardi', 2, 'jeudi', 'vendredi', 'samedi', 7]
6 Vérifier lappartenance dun élément à une liste grâce à in et not in >>> liste = [3.25, 12, "montant"] >>> if (12 in liste): print "Cette liste renferme la valeur 12" Cette liste renferme la valeur 12 >>> L = [["rouge", "vert", "bleu"], "noir", "blanc"] >>> ["rouge", "vert", "bleu"] in L True Longueur dune liste La fonction len() renvoie le nombre déléments présents dans la liste. Ex.:>>> len(jour) 7 Suppression dune liste On peut supprimer une liste entière mais cela nest pas nécessaire. del jour On préfère plutôt la laisser quitter sa portée.
7 Comparaison entre listes On compare les listes jusquà détermination dune gagnante. >>> liste1 = ["uvw", 13, ] >>> liste2 = ["ua", 9, "abc"] >>> liste3 = ["uvw", 15, "chaîne"] >>> liste4 = liste1 >>> print (liste1 < liste2, liste1 < liste3, liste2 < liste3, liste1 == liste4) (False, True, True, True) Concaténation de listes (opérateur +) >>> voyelles_minuscules = ['a', 'e', 'i', 'o', 'u', 'y'] >>> voyelles_majuscules = ['A', 'E', 'I', 'O', 'U', 'Y'] >>> voyelles = voyelles_minuscules + voyelles_majuscules >>> print voyelles ['a', 'e', 'i', 'o', 'u', 'y', 'A', 'E', 'I', 'O', 'U', 'Y'] >>> Forme = ["losange", "triangle", "cube"] >>> Dimension = [2, 3] >>> print Forme + Dimension ['losange', 'triangle', 'cube', 2, 3]
8 >>> Forme = Forme + "rectangle" Traceback (most recent call last): File " ", line 1, in Forme = Forme + "rectangle" TypeError: can only concatenate list (not "str") to list >>> Forme = Forme + ["rectangle"] >>> print Forme ['losange', 'triangle', 'cube', 'rectangle'] >>> Forme += "polygone" >>> print Forme ['losange', 'triangle', 'cube', 'rectangle', 'p', 'o', 'l', 'y', 'g', 'o', 'n', 'e'] >>> Forme += ["Polygone"] >>> print Forme ['losange', 'triangle', 'cube', 'rectangle', 'p', 'o', 'l', 'y', 'g', 'o', 'n', 'e', 'Polygone'] + nest pas défini pour des types différents de par et dautre de lopérateur. On y arrive en créant une liste renfermant la donnée à insérer. += est défini pour des listes de par et dautre de lopérateur. += est aussi défini pour une liste à gauche et une chaîne de caractères à droite de lopérateur; la chaîne de caractères est décomposée en une liste formée des caractères de la chaîne.
9 Opérateur de répétition à laide de * Création dune nouvelle liste renfermant n copies des éléments dune liste. >>> position = [0, 1, 2, 3, 4, 5] >>> position = position * 2 >>> print position [0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5] >>> vecteur_nul = [0] * 3 >>> print vecteur_nul [0, 0, 0] >>> S = ["plume", 3.9, True] * 3 >>> print S ['plume', , True, 'plume', , True, 'plume', , True] Lopérateur *= existe aussi. >>> print ["_ "] * 5 ['_ ', '_ ', '_ ', '_ ', '_ ']
10 Méthodes intégrées cmp() permet de comparer 2 listes. 1 er cas : les éléments correspondants sont de même type dans les 2 listes. >>> A = ["saison", 3.13, 2+7j] >>> B = ["saison", 2.1, 3+9j] >>> C = ["saison", 2.1, 5+4j] >>> A < B False >>> B < C Traceback (most recent call last): File " ", line 1, in B < C TypeError: no ordering relation is defined for complex numbers >>> L = [2, 5, 7] >>> M = [2, 5, 7, 9] >>> L < M True >>> L = ["ABC", 7] >>> M = ["ABCD"] >>> L < M True Lorsque la fin dune liste est atteinte, la plus longue est la plus grande.
11 2 ième cas : les éléments correspondants sont de types différents dans les 2 listes. >>> L = [2, 6.3] >>> M = [1.7, 6] >>> L < M False >>> L = ["ABC"] >>> M = [ ] >>> L < M False >>> L = [[3,4], 2] >>> M = [[7, 8], 5] >>> L < M True >>> M = [[2, 8], 5] >>> L < M False Si ce sont des nombres, effectuer une conversion et comparer. Si lun des éléments est un nombre, le nombre est le plus petit. Sinon, effectuer un tri alphabétique. Note :Python fait de son mieux pour effectuer la comparaison mais il se peut quil ny ait aucune relation entre les données ou que cela soit difficile à prévoir.
12 La fonction membre append() permet dajouter un élément à la fin dune liste. Ex.:>>> jour.append('dimanche') >>> print jour ['lundi', 'mardi', 2, 'jeudi', 'vendredi', 'samedi', 'dimanche'] On aurait pu écrire : jour = jour + ['dimanche']mais cela est moins avantageux car cela entraîne la création dune nouvelle liste ce qui nest pas le cas de la fonction append. max() et min() >>> L = ["OH", "LA", "la", "hourra"] >>> min(L), max(L) ('LA', 'la') >>> "OH" < "oh" True >>> M = ["Attention", 81, "Aventure"] >>> min(M), max(M) (81, 'Aventure') Très utiles lorsque les listes sont formées de nombres et de chaînes de caractères.
13 Tri des éléments dune liste à laide de la méthode sort(). >>> nombres_entiers = [32, 13, 64, 0, -25, 9] >>> nombres_entiers.sort() >>> print nombres_entiers [-25, 0, 9, 13, 32, 64] >>> nombres_entiers = [32, 13, 64, 'zero', -25, 9] >>> sorted(nombres_entiers) [-25, 9, 13, 32, 64, 'zero'] >>> nombres_entiers [32, 13, 64, 'zero', -25, 9] >>> nombres_entiers.sort() >>> print nombres_entiers [-25, 9, 13, 32, 64, 'zero'] Inverser lordre des éléments dune liste à laide de la méthode reverse(). >>> Voyelles = ['a', 'e', 'i', 'o', 'u', 'y'] >>> Voyelles.reverse() >>> print Voyelles ['y', 'u', 'o', 'i', 'e', 'a'] La méthode sort modifie la liste courante; sinon, on peut utiliser la fonction sorted qui retourne la liste triée.
14 Liste.index(élément, i = 0, j = len(liste)) Retrouver le plus petit indice k dun élément dune liste tel que : Liste[k] == élément et i <= k < j. >>> Voyelles = ['a', 'e', 'i', 'o', 'u', 'y'] >>> Voyelles.index('i') 2 Retourner le nombre doccurrences dun élément dune liste à laide de la méthode count(). >>> Expression = ['e', 't', ' ', 'p', 'a', 't', 'a', 't', 'i', ' ', 'e', 't', ' ', 'p', 'a', 't', 'a', 't', 'a'] >>> Expression.count('a') 5 >>> Expression.count('t') 6 Liste.extend(L) Ajoute les éléments de la liste L à la fin de Liste. >>> Liste = ["Pierre", "Paul"] >>> L = ["Dubuc", "Rioux", "Bernier"] >>> Liste.extend(L) >>> print Liste ['Pierre', 'Paul', 'Dubuc', 'Rioux', 'Bernier']
15 Liste.insert(indice, élément) : Insère élément dans Liste en position indice. >>> Jours = ["Lundi", "Jeudi", "Vendredi", "Samedi"] >>> Jours.insert(0, "Dimanche") >>> print Jours ['Dimanche', 'Lundi', 'Jeudi', 'Vendredi', 'Samedi'] >>> Jours.insert(2, "Mardi") >>> print Jours ['Dimanche', 'Lundi', 'Mardi', 'Jeudi', 'Vendredi', 'Samedi'] >>> Jours.insert(3, "Mercredi") >>> print Jours ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'] Liste.pop(indice= -1) : Supprime de la liste et retourne lélément en position indice. En labsence dindice, le dernier élément est considéré. >>> Jours = ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'] >>> Jours.pop() 'Samedi' >>> print Jours ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi'] >>> Jours.pop(0) 'Dimanche' >>> print Jours ['Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi']
16 Création dune liste de nombres à laide de la fonction range(). >>> range(12) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] >>> range(0) [] >>> range(3,7) [3, 4, 5, 6] >>> range(6, 12, 2) [6, 8, 10] >>> U = range(4) + range(4, 8) >>> print U [0, 1, 2, 3, 4, 5, 6, 7] >>> range(6, 2) [] >>> range(6, 2, -1) [6, 5, 4, 3] range(n) :génère une liste renfermant les nombres 0, 1, 2, …, n-1; si n 0, cela génère une liste vide []. range(m, n) :génère une liste renfermant les nombres m, m+1, m+2, …, n-1; si m n, cela génère une liste vide []. range(m, n, p) :génère une liste renfermant les nombres m, m+p, m+2p, …, m+kp, où k est le plus grand entier tel que m+kp 0, m+kp > n si p < 0.
17 Parcours dune liste à laide de linstruction for >>> liste = [3.25, 12, "montant"] >>> indice = 0 >>> while (indice < len(liste)): print type(liste[indice]), liste[indice] indice = indice montant >>> liste = [3.25, 12, "montant"] >>> for element in liste : print type(element), element montant ou encore La séquence quil faut traiter. Variable destinée à contenir succes- sivement tous les éléments de la séquence. Son type est automatique- ment adapté à celui de lélément qui est en cours de traitement.
18 Parcours dune liste à laide des instructions for, range() et len() >>> chiffres = ['zero', 'un', 'deux', 'trois', 'quatre', 'cinq', 'six', 'sept', 'huit', 'neuf'] >>> for indice in range(len(chiffres)): print indice, chiffres[indice] 0 zero 1 un 2 deux 3 trois 4 quatre 5 cinq 6 six 7 sept 8 huit 9 neuf On peut étendre la déf n de la liste sur plusieurs lignes.
19 Extraction dune sous-liste dans une liste à laide dune tranche [m:n]désigne les éléments en position m, m+1, m+2, …, n-1. >>> Voyelles = ['a', 'e', 'i', 'o', 'u', 'y'] >>> print Voyelles[1:3] ['e', 'i'] >>> print Voyelles[3] o >>> print Voyelles[3:4] ['o'] >>> print Voyelles[3:] ['o', 'u', 'y'] >>> print Voyelles[:3] ['a', 'e', 'i'] >>> print Voyelles[-1] y >>> print Voyelles[-1:-3] [] >>> print Voyelles[-3:-1] ['o', 'u'] un élément Une tranche dans une liste est toujours une liste.
20 Extraction dune sous-liste dans une liste à laide dune tranche >>> jour = ['lundi', 'mardi', 3, 4, 'vendredi', 'samedi', 7] >>> saisons = [1, "printemps", 2, "ete", 3, "automne", 4, "hiver"] >>> print saisons[::2] [1, 2, 3, 4] >>> print saisons[1::2] ['printemps', 'ete', 'automne', 'hiver'] >>> print saisons[4:6] [3, 'automne'] >>> saisons = [[1, 2, 3, 4], ["printemps", "ete", "automne", "hiver"]] >>> print saisons[1] ['printemps', 'ete', 'automne', 'hiver'] >>> print saisons[1][1] ete
21 Insertion dune sous-liste dans une liste à laide dune tranche >>> couleur = ['bleu', 'blanc', 'rouge'] >>> couleur[2:2] = ['noir'] >>> print couleur ['bleu', 'blanc', 'noir', 'rouge'] >>> couleur[1:] = ['gris'] >>> print couleur ['bleu', 'gris'] >>> couleur[:0] = ['blanc', 'noir', 'rouge'] >>> print couleur ['blanc', 'noir', 'rouge', 'bleu', 'gris'] >>> couleur[6:6] = ['magenta'] >>> print couleur ['blanc', 'noir', 'rouge', 'bleu', 'gris', 'magenta'] >>> couleur[6:6] = ['blanc'] >>> print couleur ['blanc', 'noir', 'rouge', 'bleu', 'gris', 'magenta', 'blanc'] Une tranche doit être présente à droite du signe daffectation sil en existe une à gauche.
22 Suppression ou remplacement dune sous-liste dans une liste à laide dune tranche >>> nombres = [1, 3, 6, 8, 10, 18] >>> nombres[3:5] = [9, 12, 15] >>> print nombres [1, 3, 6, 9, 12, 15, 18] >>> nombres[7:7] = [21, 24, 27, 30] >>> print nombres [1, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30] >>> nombres[3:5] = [] >>> print nombres [1, 3, 6, 15, 18, 21, 24, 27, 30] >>> nombres[3:] = nombres[0:3] >>> print nombres [1, 3, 6, 1, 3, 6] >>> liste = ["uvw", 13, , [], ""] >>> liste[2:4] = ["OUI", 9+5j] >>> print liste ['uvw', 13, 'OUI', (9+5j), '']
23 Laffectation dune liste dans une autre crée un alias à la liste et non une véritable copie à la liste. >>> couleurs = ['bleu', 'blanc', 'rouge'] >>> teintes = couleurs >>> teintes[1] = 'noir' >>> print couleurs ['bleu', 'noir', 'rouge'] >>> palette = couleurs +[] >>> palette[2] = 'orange' >>> print palette ['bleu', 'noir', 'orange'] >>> print couleurs ['bleu', 'noir', 'rouge'] Ceci est une expression.
24 Les tuples Vous savez quil nest pas possible de changer les caractères au sein dune chaîne existante, alors que vous pouvez modifier les éléments dune liste. Un tuple est une collection déléments à lintérieur de parenthèses séparés par des virgules semblable à une liste mais qui nest pas modifiable. Les tuples sont préférables aux listes partout où lon veut être certain que les données transmises ne soient pas modifiées par erreur. >>> saisons = ("printemps", "été", "automne", "hiver") >>> print saisons ('printemps', 'été', 'automne', 'hiver') >>> print saisons[2:3] ('automne',) >>> print ("printemps",) + saisons[1:4] ('printemps', 'été', 'automne', 'hiver') >>> saisons[2] = "Automne" Traceback (most recent call last): File " ", line 1, in saisons[2] = "Automne" TypeError: 'tuple' object does not support item assignment Il faut toujours au moins une virgule pour définir un tuple. Un tuple peut représenter une clé de dictionnaire ce quune liste ne peut faire.
25 >>> un_tuple = () >>> print un_tuple () >>> une_chaine = ("abc") >>> print type(une_chaine), une_chaine abc >>> un_autre_tuple = ("abc",) >>> print type(un_autre_tuple), un_autre_tuple ('abc',) >>> tuple("abc") ('a', 'b', 'c') tuple vide Pour accéder aux valeurs dun tuple, on utilise les crochets de la même façon quavec les listes. >>> Couleur = ("blanc", "bleu", "rouge", "mauve", "noir") >>> print Couleur[1:3] ('bleu', 'rouge') >>> print Couleur[:3] ('blanc', 'bleu', 'rouge') >>> print Couleur[3:] ('mauve', 'noir') Création et affectation dun tuple (suite)
26 Modification dun tuple Cela ne peut se faire directement. Il faut créer un nouveau tuple à laide danciens grâce à lopérateur de concaténation ou de répétition. >>> Teinte = Couleur[1], Couleur[2], Couleur[4] >>> print Teinte ('bleu', 'rouge', 'noir') >>> Teinte = Teinte[0:2] + ("vert",) >>> print Teinte * 2 ('bleu', 'rouge', 'vert', 'bleu', 'rouge', 'vert') On peut modifier certains éléments dun tuple si ces éléments sont modifiables. >>> T = (5, [0, 1, 2]) >>> print T (5, [0, 1, 2]) >>> T[0] = 6 Traceback (most recent call last): File " ", line 1, in T[0] = 6 TypeError: 'tuple' object does not support item assignment >>> T[1][0] = -1 >>> print T (5, [-1, 1, 2])
27 Suppression dun tuple ou des éléments dun tuple Il est impossible de supprimer individuellement les éléments dun tuple. On peut assembler un nouveau tuple en omettant les éléments indésirables. Pour supprimer explicitement un tuple entier, on utilise del : del Teinte Les opérateurs *, +, in, [],, ==, = et les fonctions intégrées len, max, min, cmp et list se comportent exactement de la même façon avec les tuples quavec les listes. Les méthodes de manipulation de listes - tri, remplacement, insertion, etc. – ne sont pas implémentées. Un ensemble déléments séparés par des virgules et écrits sans symboles didentification de type crochets pour les listes, parenthèses pour les tuples, etc. est par défaut un tuple. >>> "Abc", 99 ('Abc', 99) >>> x = 23, 45, "q" >>> x (23, 45, 'q') >>> u, v = 0, 1 >>> u, v (0, 1) >>> print u, v 0 1 Les fonctions intégrées list() et tuple() permettent de convertir une liste en tuple ou vice versa. >>> T = (2, 3) >>> T = list(T) >>> print T [2, 3]
28 #Déterminer tous les nombres premiers entre 2 et n. # n = input("Entrez la valeur de n : ") Liste = range(2, n+1) Nombres_premiers = [] while (Liste != []): V = Liste[0] Nombres_premiers.append(V) W = V while (W <= n): if (W in Liste): Liste.remove(W) W = W + V print Nombres_premiers Recherche des nombres premiers entre 2 et n.
29 Recherche de la note maximale, de la moyenne des notes dune classe et impression des résultats tels que saisis ou triés en ordre croissant de note #Saisir pour chaque étudiant son matricule (7 chiffres) et sa note sur 100 #(une valeur entière). Pour terminer la saisie, entrez comme matricule la # valeur 0 et n'importe quelle note. # On doit s'assurer que la note d'un étudiant est saisie une seule fois. Liste = [] while True: matricule, note = input("Entrez le matricule et la note d'un étudiant : ") if (matricule == 0):break if (matricule in Liste[::2]): continue Liste.append(matricule) Liste.append(note) # Recherche de la note maximale. Note_maximale = max(Liste[1::2]) # Recherche du matricule de l'étudiant ayant une note maximale # en déterminant sa position. Mat_maximale = Liste[::2][Liste[1::2].index(Note_maximale)]
30 Recherche de la note maximale, de la moyenne des notes dune classe et impression des résultats tels que saisis ou triés en ordre croissant de note # Calcul de la moyenne obtenue. somme = 0.0 for note in Liste[1::2]: somme += note moyenne = somme / len(Liste[1::2]) # Impression des résultats. print ("Le meilleur étudiant est : %7d. Il a obtenu comme note : %3d." % (Mat_maximale, Note_maximale)) print "La moyenne de la classe est : ", moyenne print "\nImpression des résultats de la classe\n" print "\tMatricule\tNote" for i in range(len(Liste[::2])): print "\t", Liste[2*i], "\t", Liste[2*i + 1]
31 Recherche de la note maximale, de la moyenne des notes dune classe et impression des résultats tels que saisis ou triés en ordre croissant de note print "\nImpression des résultats de la classe triés en ordre croissant de note\n" print "\tMatricule\tNote" Liste_de_tri = [] for i in range(len(Liste[::2])): Liste_de_tri.append(Liste[2*i + 1]* Liste[2*i]) Liste_de_tri.sort() for i in range(len(Liste_de_tri)): print "\t", int(Liste_de_tri[i] % ), "\t", Liste_de_tri[i] /
32 Recherche de la note maximale, de la moyenne des notes dune classe et impression des résultats tels que saisis ou triés en ordre croissant de note Entrez le matricule et la note d'un étudiant : , 35 Entrez le matricule et la note d'un étudiant : , 54 Entrez le matricule et la note d'un étudiant : , 87 Entrez le matricule et la note d'un étudiant : , 75 Entrez le matricule et la note d'un étudiant : 0, 0 Le meilleur étudiant est : Il a obtenu comme note : 87. La moyenne de la classe est : Impression des résultats de la classe MatriculeNote Impression des résultats de la classe triés en ordre croissant de note MatriculeNote
33 Algorithme de calcul du k ième plus petit élément dune suite Étape 0.Créer une liste vide Suite. Étape 1.Tant que lélément saisi nest pas le caractère # ajouter à la liste lélément saisi. Étape 2.Saisir la valeur entière k entre 1 et la longueur de la suite. Étape 3.Conserver la valeur de k dans Valeur_de_k. Étape 4.Tant et aussi longtemps que le k ième plus petit élément nest pas trouvé Étape 4.1Créer 2 listes vides Gauche et Droite. Placer dans pivot la valeur de Suite[0]. Initialiser à 0 la variable Nb_occurrences_du_pivot désignant le nombre doccurrences du pivot choisi. Étape 4.2Pour chaque i ième élément de la suite Suite si pivot > i ième élément, ajouter le i ième élément à la liste Gauche sinonsi pivot < i ième élément,ajouter le i ième élément à la liste Droite sinon ajouter 1 à Nb_occurrences_du_pivot.
34 Étape 4.3 Si la longueur de la suite Gauche Valeur_de_k Suite = Gauche sinon si la longueur de la suite Gauche + Nb_occurrences_du_pivot >= Valeur_de_k): pivot est lélément cherché, cest terminé. sinon Valeur_de_k -= (longueur de la suite Gauche + Nb_occurrences_du_pivot) Suite = Droite Étape 5.Afficher la valeur du pivot qui correspond bien au k ième plus petit élément de la suite.
35 Calcul du k ième plus petit élément dune suite #Saisir les éléments d'une suite. Pour terminer, entrez le caractère #. Suite = [] while True: element = input("Entrez un élément de la suite : ") if (element == "#"):break Suite.append(element) #Saisir la valeur entière k. k = input("Entrez l'indice k : ") #Déterminer le k ième plus petit élément de la suite et ranger sa valeur #dans une variable pivot. #À compléter …… #Affichage du k ième plus petit élément de la suite. print "Le %5d ième plus petit élément de la suite est : %5d" % (k, pivot)
36 Calcul du k ième plus petit élément dune suite #Déterminer le k ième plus petit élément de la suite et ranger sa valeur #dans la variable pivot. Valeur_de_k = k Fin = True while (Fin): Gauche = [] Droite = [] Nb_occurrences_du_pivot = 1 pivot = Suite[0] for i in range(1, len(Suite)): if (pivot > Suite[i]):Gauche.append(Suite[i]) elif (pivot < Suite[i]):Droite.append(Suite[i]) else:Nb_occurrences_du_pivot += 1 if (len(Gauche) >= Valeur_de_k):Suite = Gauche elif (len(Gauche) + Nb_occurrences_du_pivot >= Valeur_de_k): Fin = False else : Valeur_de_k -= (len(Gauche) + Nb_occurrences_du_pivot) Suite = Droite
37 Fusion de 2 suites triées #Saisir les éléments de la première suite. #Pour terminer la saisie, entrez le caractère #. Suite1 = [] while True: element = input("Entrez un élément de la première suite : ") if (element == "#"):break Suite1.append(element) #Saisir les éléments de la deuxième suite. #Pour terminer la saisie, entrez le caractère #. Suite2 = [] while True: element = input("Entrez un élément de la deuxième suite : ") if (element == "#"):break Suite2.append(element)
38 Fusion de 2 suites triées #Trier les 2 suites en ordre croissant. Suite1.sort() Suite2.sort() #Fusionner ces 2 suites en une seule. i = 0 j = 0 Suite = [] while (i < len(Suite1) and j < len(Suite2)): if (Suite1[i] <= Suite2[j]): Suite.append(Suite1[i]) i = i + 1 else : Suite.append(Suite2[j]) j = j + 1
39 Fusion de 2 suites triées while (i < len(Suite1)): Suite.append(Suite1[i]) i = i + 1 while (j < len(Suite2)): Suite.append(Suite2[j]) j = j + 1 #Affichage des 2 suites triées. print "\nPremière suite triée : ", for i in range(len(Suite1)):print Suite1[i], print "\nDeuxième suite triée : ", for i in range(len(Suite2)):print Suite2[i], #Affichage des 2 suites fusionnées. print "\nFusion des 2 suites : ", for i in range(len(Suite)):print Suite[i],
40 Fusion de 2 suites triées Entrez un élément de la première suite : 54 Entrez un élément de la première suite : 76 Entrez un élément de la première suite : 1 Entrez un élément de la première suite : 9 Entrez un élément de la première suite : 5 Entrez un élément de la première suite : 34 Entrez un élément de la première suite : 67 Entrez un élément de la première suite : 2 Entrez un élément de la première suite : "#" Entrez un élément de la deuxième suite : 24 Entrez un élément de la deuxième suite : 7 Entrez un élément de la deuxième suite : 2 Entrez un élément de la deuxième suite : 9 Entrez un élément de la deuxième suite : 6 Entrez un élément de la deuxième suite : "#" Première suite triée : Deuxième suite triée : Fusion des 2 suites :
41 Réduction dune suite de sorte que chaque élément ait une seule occurrence. # Saisir les éléments de la suite initiale. Terminez la saisie avec le caractère #. Suite, Suite_reduite = [], [] while True: element = input("Entrez un élément de la suite : ") if (element == "#"):break Suite.append(element) for i in range(len(Suite)): if (Suite[i+1:].count(Suite[i]) == 0): Suite_reduite.append(Suite[i]) #Affichage de la suite originale. print "\nImpression de la suite originale : ", for i in range(len(Suite)):print Suite[i], #Affichage de la suite réduite. print "\nImpression de la suite réduite : ", for i in range(len(Suite_reduite)):print Suite_reduite[i],
42 Réduction dune suite de sorte que chaque élément ait une seule occurrence. Entrez un élément de la suite : 5 Entrez un élément de la suite : 3 Entrez un élément de la suite : 4 Entrez un élément de la suite : 2 Entrez un élément de la suite : 5 Entrez un élément de la suite : 4 Entrez un élément de la suite : 3 Entrez un élément de la suite : 5 Entrez un élément de la suite : 7 Entrez un élément de la suite : 8 Entrez un élément de la suite : 9 Entrez un élément de la suite : 45 Entrez un élément de la suite : 2 Entrez un élément de la suite : "#" Impression de la suite originale : Impression de la suite réduite :
43 Somme de deux masques binaires. MasqueA, MasqueB = input("Saisir les 2 masques binaires : ") # Placer dans Premier_terme la liste des chiffres du # masque le plus long et dans Deuxieme_terme la liste # des chiffres du masque le moins long précédée d'une # liste de zéro de telle sorte que les 2 termes soient # de même longueur. if (len(MasqueA) > len(MasqueB)): Premier_terme = ['0'] + list(MasqueA) m = len(MasqueA) - len(MasqueB) + 1 Deuxieme_terme = ['0'] * m + list(MasqueB) else: Premier_terme = ['0'] + list(MasqueB) m = len(MasqueB) - len(MasqueA) + 1 Deuxieme_terme = ['0'] * m + list(MasqueA) # Inverser chaque masque. Premier_terme.reverse() Deuxieme_terme.reverse()
44 Somme de deux masques binaires.. Saisir les 2 masques binaires : " ", " " = # Placer dans Premier_terme la somme des 2 masques. retenue = 0 for i in range(len(Premier_terme)): chiffre = retenue + int(Premier_terme[i]) + int(Deuxieme_terme[i]) if (chiffre % 2 == 0): Premier_terme[i] = '0' else: Premier_terme[i] = '1' retenue = chiffre / 2 Premier_terme.reverse() # Afficher le résultat de la somme. if (Premier_terme[0] == '0'): print MasqueA, " + ", MasqueB, " = ", "".join(Premier_terme[1:]) else: print MasqueA, " + ", MasqueB, " = ", "".join(Premier_terme)
45 Copies superficielles et copies en profondeur Lors dune affectation, nous effectuons une copie superficielle ou une copie en profondeur. 1 er cas : Copie superficielle. >>> couleur = ["rouge", 1, ("blanc", "noir"), ["gris"]] >>> teinte = couleur >>> teinte[0] = "ROUGE" >>> teinte[1] = 2 >>> teinte[2] = "BLANC" >>> teinte[3] = 3 >>> print couleur ['ROUGE', 2, 'BLANC', 3] 2 ième cas : Copie en profondeur. >>> couleur = ["rouge", 1, ("blanc", "noir"), ["gris"]] >>> teinte = couleur[:] >>> teinte[0] = "ROUGE" >>> teinte[1] = 2 >>> teinte[2] = "BLANC" >>> teinte[3] = 3 >>> print couleur ['rouge', 1, ('blanc', 'noir'), ['gris']] couleur et teinte désignent la même variable. couleur et teinte désignent deux variables différentes.
46 Copies superficielles et copies en profondeur >>> couleur = ["rouge", 1, ("blanc", "noir"), ["gris"]] >>> import copy >>> teinte = copy.deepcopy(couleur) >>> teinte[0] = "ROUGE" >>> print teinte ['ROUGE', 1, ('blanc', 'noir'), ['gris']] >>> print couleur ['rouge', 1, ('blanc', 'noir'), ['gris']] On peut aussi forcer une copie en profondeur.