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 |
Longueur de s |
Plus grand et plus petit élément de s |
|
x |
True si x est dans s, False sinon |
x |
True si x n'est pas dans s, False sinon |
s |
Concaténation de s et t |
s |
Concaténation de n copies de s |
s. |
Indice de la 1re occurrence de x dans s |
s. |
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 :
>>>
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 :
>>>
chaine[0
] =
'Z'
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 ).
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 :
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
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 (…).
>>>
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
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 :
>>>
a =
2
>>>
2
*
a, 3
*
a, 4
*
a # retourne un t-uplet
(
4
, 6
, 8
)