Les structures de données sont un point essentiel de tout langage de programmation
Les diapos qui suivent n'offrent qu'une couverture partielle du sujet
Vous devez lire attentivement et vous référer à la documentation officelle de Python :
Les listes sont des sequences (str
, tuple
, list
)
Les sequences sont des structures de données indicées qui peuvent contenir des éléments de différents types
Les sequences sont des iterables, les listes aussi donc
Les éléments d'une liste peuvent être modifiés (mutable)
Une liste vide peut se déclarer de deux façons
stack = list()
stack = []
stack = ["le", "guépard", "le", "poursuit"]
stack = list('Perl')
stack
append(x)
: ajoute un élément x à la fin de la liste (haut de la pile*)extend([x, y, z])
: ajoute tous les éléments de la liste arg à la fin de la listepop([index])
: supprime et renvoie le dernier élément de la liste ou les index de la liste argument si argindex(x)
: renvoie l'index du premier élément de valeur xcount(x)
: renvoie le nombre de fois où x apparaîtsort()
: trie et modifie la liste, lire la doc pour en savoir plus sur les ordres de tristack = [12, 15, 12, 7, 18]
stack.index(12)
stack.count(12)
stack.sort()
stack
stack.append(23)
stack
stack.append([35, 46])
stack
stack.extend([51, 52])
stack
map()
et filter()
[i ** 2 for i in range(10)]
[i ** 2 for i in range(10) if i % 2 == 0]
[(i, j) for i in range(2) for j in ['a', 'b']]
x = [1, 2, 3]
y = x
y[0] = 4
x
Pour copier une liste il faut utiliser :
x = [1, 2, 3]
y = x[:]
# ou
y = list(x)
tuple
) sont des sequences similaires aux listes sauf qu'elles ne peuvent pas être modifiées (immutable)voyelles = ('a', 'e', 'i', 'o', 'u', 'y')
var = tuple('Perl')
var
x, y, z = (1, 2, 3)
y
lexique = [("maison", "mEz§"), ("serpent", "sERp@")]
for ortho, phon in lexique:
print(phon)
var = (1)
type(var)
var = (1, )
type(var)
La boucle for
est particulièrement adaptée pour parcourir les iterables et donc les listes
for item in voyelles:
print(item)
La fonction enumerate
peut être utile dans certains cas, elle renvoie un tuple
contenant l'indice et la valeur de l'item à l'indice concerné
for i, item in enumerate(voyelles):
print(i, item)
ens1 = {'le', 'guépard', 'le', 'poursuit'}
ens1
ens2 = {"avec", "le", "chandelier", "dans", "la", "cuisine"}
ens1.intersection(ens2)
Les dictionnaires (dict
) sont des structures de données associatives de type clé: valeur
Les clés d'un dictionnaire sont uniques, seuls les types immutable peuvent être des clés (doc)
key in d
retourne True si key
est une clé de d
keys()
retourne la liste des clésvalues()
retourne la liste des valeursitems()
retourne la liste des couples clé:valeur (tuple)setdefault(key, default)
retourne la valeur associée à la clé. Si la clé n'existe pas, ajoute la clé associée à defaultd = {'Perl':'Larry Wall', 'Python':'Guido Van Rossum', 'C++':'Bjarne Stroustrup'}
d['Perl']
d['Ruby']
d.get('Ruby')
Le module collections propose des implémentations de structures de données supplémentaires
Dans la liste (voir doc), deux pourront nous intéresser :
defaultdict
defauldict
est similaire à un dict
mais il permet l'autovivification
Son implémentation le rend plus rapide qu'un dictionnaire utilisé avec la fonction setdefault
import collections
lexique = [("couvent", "kuv"), ("couvent", "kuv@")]
dico = collections.defaultdict(list)
for ortho, phon in lexique:
dico[ortho].append(phon)
dico
Counter
est un dictionnaire où les valeurs attendues sont les nombres d'occurences des clés
from collections import Counter
cnt = Counter()
list = ['le', 'guépard', 'le', 'poursuit']
for item in list:
cnt[item] += 1
cnt
Vous rendrez des scripts Python3. Avec des commentaires c'est mieux.
sem_Ef9POe.conll