Types de données : séquences

Séquence

  • Suite ordonnée d'éléments, éventuellement vide

  • Eléments accessibles par leur rang

En Python :

  • Chaîne

  • Liste

  • n-uplet

Opérations

  • Inclusion

x in s True si l'élément x est dans la séquence s et False sinon

x not in s contraire !

  • Concaténation

s1 + s2 concatenation des séquences s1 et s2

s * n ou n * s n copies de la séquence s

  • Accès

s[i] accès à l'élément d'indice i (l'origine a l'indice 0)

s[i:j[:pas]] accès aux éléments entre les indices i (inclus) et j (exclus).

Le pas est une valeur optionnelle pouvant être négative (valeur par défaut : 1)

  • Autres classiques...

len(s) longueur de la séquence s

min(s) plus petit élément de la séquence s

max(s) plus grand élément de la séquence s

n-uplet

>>> s = 1,7,2,4

>>> type(s)

<class 'tuple'>

>>> len(s)

4

>>> 3 in s

False

>>> s[1]

7

>>> s + (5,3)

(1, 7, 2, 4, 5, 3)

Chaîne

>>> s = '1724'

>>> type(s)

<class 'str'>

>>> len(s)

4

>>> '3' in s

False

>>> s[1]

'7'

>>> s + '53'

'172453'

Liste

>>> s = [1,7,2,4]

>>> type(s)

<class 'list'>

>>> len(s)

4

>>> 3 in s

False

>>> s[1]

7

>>> s + [5,3]

[1, 7, 2, 4, 5, 3]

Liste

Séquence modifiable d'éléments

Éléments de types différents dans la même liste

>>> s = [1,7,2,4]

>>> type(s)

<class 'list'>

>>> s[1] = 3

>>> s

[1, 3, 2, 4]

>>> s[1]

3

>>> s[1] = 'A'

>>> s

[1, 'A', 2, 4]

>>> s = [1,3,5,7]

>>> s[2]

5

>>> s[len(s)-1]

7

>>> for c in s :

... print(c,end=' ')

...

1 3 5 7

>>> s[1:3]

[3,5]

>>> s[1:3] = [2,4]

>>> s

[1, 2, 4, 7]

>>> s[len(s):len(s)] = [8,9]

>>> s

[1, 2, 4, 7, 8, 9]

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

>>> s

[1, 2, 3]

>>> t = s

>>> t[0] = 9

>>> t

[9, 2, 3]

>>> s

[9, 2, 3]

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

>>> t = []

>>> t[:0] = s[0:]

>>> t

[1, 2, 3]

>>> t[0] = 9

>>> t

[9, 2, 3]

>>> s

[1, 2, 3]

Liste multidimensionnelle

Liste dont les éléments sont des listes

>>> s = [[4,5],[1,2,3],[6,7,8,9]]

>>> type(s)

<class 'list'>

>>> len(s)

3

>>> type(s[2])

<class 'list'>

>>> s[2]

[6, 7, 8, 9]

>>> s[2][1]

7

>>> s[1][2]

3

>>> s = [[4,5],[1,2,3],[6,7,8,9]]

>>> for c in s :

... print(c)

...

[4, 5]

[1, 2, 3]

[6, 7, 8, 9]

>>> s[2]

[6, 7, 8, 9]

>>> for c in s :

... for e in c :

... ... print(e, end=' ')

... print()

...

4 5

1 2 3

6 7 8 9

Opérations

  • Affectation/initialisation (rappel)

s[i] = x l'élément d'indice i de la liste s prend la valeur x.

s[i:j[:pas]] = x les éléments entre les indices i (inclus) et j (exclus) prennent la valeur x.

Le pas est une valeur optionnelle (valeur par défaut : 1)

list(range(i[,j[,pas]])) génération d'une liste contenant des valeurs entre i (inclus) et j (exclus).

Le pas est une valeur optionnelle (valeur par défaut : 1)

  • Suppression

del s[i:j[:pas]] <==> s[i:j] = [] les éléments entre les indices i (inclus) et j (exclus) sont supprimés.

Le pas est une valeur optionnelle (valeur par défaut : 1)

  • Comptage

s.count(x) retourne le nombre d'élément de la liste s qui ont une valeur égale à x.

s.index(x[,start[,stop]]) retourne l'index du premier élément de la liste s qui a une valeur égale à x.

On peut choisir l'indice de départ et éventuellement celui de fin.

Si x n'est pas trouvé, alors une erreur apparaît.

  • Ajout

s.append(x) <==> s[len(s):len(s)] = [x] ajoute l'élément x (ou la sous-liste x) dans la liste s

s.insert(i, x) <==> s[i:i] = [x] ajoute l'élément x (ou la sous-liste x) en position i dans la liste s

s.extend(s1) <==> s[len(s):len(s)] = s1 ajoute la liste s1 en fin de liste s

  • Suppression

s.remove(x) Enlève le premier élément (ou la première sous-liste x) dans la liste s

s.pop(i) Enlève et retourne (affiche) l'élément en position i dans la liste s

  • Autres modifications

s.reverse() Inverse les éléments de la liste s

s.sort() Tri les éléments de la liste s

  • Et bien plus encore...

Typage dynamique

Parcours d'une liste dont les types sont différents à l'aide d'une boucle for

>>> divers = [3, 17.25, [5, 'Jean'], 'Linux is not Windoze']

>>> for item in divers:

... print(item, type(item))

3 <class 'int'>

17.25 <class 'float'>

[5, 'Jean'] <class 'list'>

Linux is not Windoze <class 'str'>

n-uplet

Séquence non modifiable d'éléments

  • singleton : (a)

  • paire : (a,b)

  • triplet : (a,b,c)

  • quadruplet : (a,b,c,d) . . .

  • n-uplet : (a,b,c,d,e,f,g,h,i,j,...)

>>> s = 1,7,2,4 ou >>> s = (1,7,2,4)

>>> type(s)

<class 'tuple'>

>>> s[1] = 3

Traceback ...

TypeError : 'tuple' object does not support item assignment

>>> s[1]

7

  • Même opérations que les listes (syntaxiquement)

  • MAIS les n-uplets (ou tuples) ne sont pas modifiables !

  • Intérêts :

    • Éviter les modifications par erreur,

    • Moins gourmands en ressources (mémoire et CPU),

    • Etc.

>>> s = ()

>>> type(s)

<class 'tuple'>

>>> s = 1,7,2,4

>>> type(s)

<type 'tuple'>

>>> s

(1, 7, 2, 4)

>>> s = (5)

>>> type(s)

<class 'int'>

>>> s = (5,)

>>> type(s)

<class 'tuple'>

>>> s = (5,)+()+(6,7,9)

>>> s

(5, 6, 7, 9)

>>> s = (5,6,7,9)

>>> s[1:3]

(6, 7)

>>> s[1:]

(6, 7, 9)

>>> s[:2]

(5, 6)

>>> s[-2:]

(7, 9)

Chaîne

Séquence non modifiable de caractères

>>> s = '1724'

>>> type(s)

<class 'str'>

>>> s[1] = '3'

Traceback ...

TypeError : 'str' object does not support item assignment

>>> s[1]

'7'

>>> s = 'une chaîne'

>>> s

'une chaîne'

>>> s = "une autre chaîne"

>>> s

'une autre chaîne'

>>> s = 'chaîne entrée sur \

plusieurs lignes'

>>> s

'chaîne entrée sur plusieurs lignes'

>>> s = 'c\'est ça "peuchère"'

>>> s

'c\'est ça "peuchère"'

>>> print(s)

c'est ça "peuchère"

>>> s = 'des caractères'

>>> s[9]

't'

>>> for c in s :

... print(c,end='')

...

des caractères

>>> s[4:9]

'carac'

>>> s[len(s)-1]

's'

>>> s[:4] + 'mo' + s[9] + s[-1]

'des mots'

Opérations

  • Découpage

s.split([separator[,maxsplit]]) convertit la chaîne s en une liste de sous-chaînes.

On peut choisir le caractère séparateur en le fournissant comme argument (valeur par défaut : espace).

On peut imposer un nombre maximal de découpes.

>>> s='Ceci est un test'

>>> s.split()

['Ceci', 'est', 'un', 'test']

>>> s.split(' ', 2)

['Ceci', 'est', 'un test']

>>> s='A,C,A,C,T'

>>> s.split()

['A,C,A,C,T']

>>> s.split(',')

['A', 'C', 'A', 'C', 'T']

  • Regroupement (contraire)

s.join()

  • Recherche

s.find(sch[,start[,end]]) renvoit la position de la sous-chaîne sch dans la chaîne s.

On peut choisir l'indice de départ et éventuellement celui de fin.

Si sch n'est pas trouvé, alors la valeur -1 est renvoyée.

>>> s='Ceci est un test'

>>> s.find('un')

9

>>> s.find('toto')

-1

>>> s='ACACT'

>>> s.find('AC')

0

>>> s.find('AC',1)

2

  • Comptage

s.count(sch[,start[,end]]) compte le nombre de sous-chaînes sch dans la chaîne s.

On peut choisir l'indice de départ et éventuellement celui de fin.

Si sch n'est pas trouvé, alors la valeur 0 est renvoyée.

>>> s='ACACT'

>>> s.count('AC')

2

>>> s.count('AC',1)

1

>>> s.count('AT')

0

  • Mutation

s.replace(c1,c2[,maxCount]) remplace tous les caractères c1 par des caractères c2 dans la chaîne s.

On peut choisir un nombre maximal de mutations.

>>> s='ACACT'

>>> s.replace('A', 'T')

'TCTCT'

>>> s.replace('A', 'T',1)

'TCACT'

  • Conversion

float(s) convertit la chaîne s en nombre réel.

La chaîne doit représenter un nombre (réel ou entier).

int(s) convertit la chaîne s en nombre entier.

La chaîne doit représenter un nombre entier.

str(obj) convertit l'objet obj en chaîne de caractères.

Peu importe le type de obj.

>>> float('12.36')

12.36

>>> int('12')

12

>>> str(12.36)

'12.36'

  • Formatage

s.format(obj1,obj2,...,objn) à partir d'une chaîne « patron » (composée d'accolades), cette méthode permet de remplacer chaque couple d'accolades (contenant éventuellement un format {format}) par la conversion de l'objet correspondant.

>>> pi =3.1416

>>> r =4.7

>>> ch ="Aire d'un disque de rayon {} : {}."

>>> print(ch.format(r, pi * r**2))

Aire d'un disque de rayon 4.7 : 69.39794400000001

>>> ch ="Aire d'un disque de rayon {} : {:4.2f}."

>>> print(ch.format(r, pi * r**2))

Aire d'un disque de rayon 4.7 : 69.40

  • Autres opérations

s.lower() convertit la chaîne s en minuscules

s.upper() convertit la chaîne s en majuscules

s.title() convertit l'initiale de chaque mot de s en majuscule

s.capitalize() convertit en majuscule seulement la première lettre de s

s.swapcase() convertit toutes les majuscules en minuscules, et vice-versa

  • Et bien d'autres encore !

AccueilProgrammation en Python > Types de données : séquences< PrécédentSuivant >