IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Programmation Python pour les scientifiques

Listes et autres structures de données - Cours avec exercices corrigés


précédentsommairesuivant

III. Structures de données séquentielles

III-A. Opérations communes

Les types int, float, bool sont des types scalaires. Les types list (listes) et str (chaînes de caractères) sont des structures de données séquentielles. Tous les objets de type séquentiel ont en commun les opérations suivantes :

Opération

Résultat

s[i]

élément d'indice i de s

s[i:j]

Tranche de i (inclus) à j (exclu)

s[i:j:k]

Tranche de i à j par pas de k

len(s)

Longueur de s

max(s), min(s)

Plus grand et plus petit élément de s

x in s

True si x est dans s, False sinon

x not in s

True si x n'est pas dans s, False sinon

s+t

Concaténation de s et t

s*n, n*s

Concaténation de n copies de s

s.index(x)

Indice de la 1re occurrence de x dans s

s.count(x)

Nombre d'occurrences de x dans s

où s et t sont des objets séquentiels de même type, et i, j, k, n sont des entiers.

III-B. Les chaînes de caractères

Les objets de type str, chaînes de caractères, sont des structures de données séquentielles :

 
Sélectionnez
>>> chaine = 'Amanda'
>>> len(chaine)
6
>>> print chaine[::-1]
adnamA
>>> chaine.count('a')
2
>>> print chaine*2
AmandaAmanda
>>> max(chaine) # minuscules sont > majuscules puis ordre alphabétique
'n'

Ce ne sont pas des objets modifiables : changer un élément produit une erreur TypeError :

 
Sélectionnez
>>> chaine[0] = 'Z'
 
Sélectionnez
TypeError: 'str' object does not support item assignment

Exemple : écrire une fonction qui teste si une chaîne est un palindrome (cliquez sur l'icône Image non disponible).

 
Cacher/Afficher le codeSélectionnez

Exemple : la recherche d'un mot dans une chaîne de caractères est un problème essentiel en informatique qui admet des algorithmes élaborés et efficients (temps d'exécution, utilisation de la mémoire). Donner une solution naïve et peu efficiente n'est pas difficile :

 
Sélectionnez
def contient(chaine, mot):
    m = len(chaine)
    n = len(mot)
    for i in range(m-n+1):
        if (mot == chaine[i:i+n]): # comparaison du mot et de la tranche de longueur n 
            return True
    return False
Image non disponible

Le résultat est lent et coûteux en mémoire, car la fonction doit effectuer jusqu'à (N-n) copies d'une liste de longueur n, et pour chacune des n comparaisons, soit de l'ordre de kitxmlcodeinlinelatexdvp(N-n) \times 2nfinkitxmlcodeinlinelatexdvp opérations et kitxmlcodeinlinelatexdvp(N-n) \times nfinkitxmlcodeinlinelatexdvp fois l'emplacement nécessaire au stockage d'un caractère utilisé.

III-C. Les structures de données tuple

En français t-uplet. Ce sont des objets séquentiels. On les définit par la liste de leurs éléments, comme pour une liste, mais entre parenthèses (…).

 
Sélectionnez
>>> seq = (0,1,2,3)
>>> print seq
(0, 1, 2, 3)
>>> print seq[0]
0
>>> print seq*2
(0, 1, 2, 3, 0, 1, 2, 3)
>>> seq[0] = 1
 
Sélectionnez
TypeError: 'tuple' object does not support item assignment

Ils diffèrent des listes surtout en ce que ce sont des objets non-modifiables (non mutables) : seq[0] = 1 produit une erreur TypeError. Les parenthèses sont optionnelles :

 
Sélectionnez
>>> a = 2
>>> 2*a, 3*a, 4*a  # retourne un t-uplet
(4, 6, 8)

précédentsommairesuivant

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2014 Jean-Philippe PREAUX. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.