Les collections

Les collections sont des types de données qui contiennent plusieurs données. Nous avons vu :

  • les chaines de caractères (str)
  • les listes (list)
  • les tuples (tuple)
  • les dictionnaires (dict)

Listes et chaines de caractères sont des séquences. Les éléments sont ordonnés et peuvent être redondants. Vous pouvez accéder à un élément de la collection par son indice avec la sémantique suivante :

knights = ["Arthur", "Lancelot", "Galahad", "Robin", "Karadoc"]
knights[2] # retourne l'élément à l'indice 2

Vous pouvez tester cette instrucion dans la cellule suivante.


In [ ]:
knights = ["Arthur", "Lancelot", "Galahad", "Robin", "Karadoc"]
print(knights[2])

Vous pouvez également extraire une partie de la liste en sous-liste grâce au slicing :

knights[2:4] # retourne une liste de 2 éléments
knights[:2] # retourne la liste des deux premiers éléments

In [ ]:
print(knights[2:4])
print(knights[:2])

Vous pouvez avoir la taille de la collection avec la fonction

len(knights)

En python, tout est objet. Un objet est une entité caractérisée par :

  • un état (des données)
  • des comportements (des fonctions associées appelées méthodes)

Contrairement aux types numériques, les collections utilisent et se manipulent à l'aide de méthodes. Leur état correspond aux données contenues. Ainsi, si nous avons une liste, trier la liste est réalisé par une méthode :

knights.sort() # tri la liste

Vous pouvez consulter les autres méthodes disponibles pour le type liste par les fonctions dir(list) et help(list).

Exercices - listes

La liste suivante représente la saison 12 de Big Bang Theory. Nous allons extraire des informations de cette liste.


In [ ]:
bbt_s12 = ["The Conjugal Configuration",
           "The Wedding Gift Wormhole",
           "The Procreation Calculation",
           "The Tam Turbulence",
           "The Planetarium Collision",
           "The Imitation Perturbation",
           "The Grant Allocation Derivation",
           "The Consummation Deviation",
           "The Citation Negation",
           "The VCR Illumination",
           "The Paintball Scattering",
           "The Propagation Proposition",
           "The Confirmation Polarization",
           "The Meteorite Manifestation",
           "The Donation Oscillation",
           "The D & D Vortex",
           "The Conference Valuation",
           "The Laureate Accumulation",
           "The Inspiration Deprivation",
           "The Decision Reverberation",
           "The Plagiarism Schism",
           "The Maternal Conclusion",
           "The Change Constant",
           "The Stockholm Syndrome"]

Nous considérons que chaque épisode dure 23 minutes, combien de temps (en minutes ou en heures/minutes) dure la saison ?


In [ ]:
import wblib.helpers as h

EPISODE_DURATION = 23

duration = h.duration_for(len(bbt_s12), EPISODE_DURATION)

print(duration)
print("{:2}h{:02}".format(*divmod(duration, 60)))

Il faudra aller au lit dans 2 heures maximum. Déterminez le nombre d'épisodes qu'il sera possible de visionner à la suite en entier. Créez une liste extraite du début de bbt_s12 de ces épisodes.


In [ ]:
to_watch = bbt_s12[:120 // 24]

Quel est le titre du dernier épisode de cette liste extraite ?


In [ ]:
print(to_watch[-1])

Créez une copie de la liste de la saison 12 associée à la variable playlist dans la cellule suivante. Cette variable nous permettra de gérer notre avancée dans la série.


In [ ]:
playlist = bbt_s12.copy()

Récupérez le nom du premier épisode à visionner pour l'afficher et supprimez-le de la liste. Recopiez cette instruction plusieurs fois (jusqu'à arriver à au dernier épisode à regarder dans les 2 heures par exemple).


In [ ]:
print('Épisode suivant :', playlist.pop(0))
print('Épisode suivant :', playlist.pop(0))
print('Épisode suivant :', playlist.pop(0))
print('Épisode suivant :', playlist.pop(0))
print('Épisode suivant :', playlist.pop(0))

La playlist ne contient que les épisodes restant à voir. Utilisez cette liste pour calculer la durée des épisodes restant à voir et profitez de la liste de la saison pour la comparer à la durée totale de la saison.

Que remarquez-vous ?


In [ ]:
import wblib.helpers as h

print('Durée restante :', h.duration_for(len(playlist), 24))
print('Durée saison :', h.duration_for(len(bbt_s12), 24))