Pour transformer et/ou filtrer les listes, Python propose un mécanisme inspiré du langage Haskell : les Comprehension lists. Soit les listes suivantes :
camelot = ["Arthur", "Merlin", "Lancelot", "Galahad", "Robin", "Karadoc"]
wizards = ['Merlin', "Tim"]
Nous pouvons obtenir une liste de la taille des éléments de la liste camelot
de la manière suivante :
[len(element) for element in camelot]
Nous pouvons obtenir la liste des chevaliers (éléments qui ne sont pas dans la liste wizards
) de la manière suivante :
[knight for knight in knights if knight not in wizards]
In [ ]:
medias = [["The Philosopher's Stone", True],
["The Chamber of Secrets", True],
["The Prisoner of Azkaban", False],
["the Goblet of Fire", True],
["the Order of the Phoenix", False],
["the Half-Blood Prince", True],
["the Deathly Hallows – Part 1", False],
["the Deathly Hallows – Part 2", False]]
In [ ]:
print([media[0] for media in medias])
Générez et affichez une liste des titres des médias non visionnés.
In [ ]:
print([title
for title, viewed in medias
if not viewed])
In [ ]:
movies = [["The Philosopher's Stone", 152, True],
["The Chamber of Secrets", 161, True],
["The Prisoner of Azkaban", 142, False],
["the Goblet of Fire", 157, True],
["the Order of the Phoenix", 138, False],
["the Half-Blood Prince", 153, True],
["the Deathly Hallows – Part 1", 126, False],
["the Deathly Hallows – Part 2", 130, False]]
À l'aide des comprehension lists et du modèle suivant, affichez le temps total pour un marathon Harry Potter.
In [ ]:
TIME_WATCHING = 'Il y a {}h{} à visionner.'
In [ ]:
total_hours, total_minutes = divmod(sum([ep_time for title, ep_time, viewed in movies]), 60)
print(TIME_WATCHING.format(total_hours, total_minutes))
Toujours à l'aide des comprehension lists et du modèle précédent, affichez le temps total des épisodes restant à voir.
In [ ]:
total_hours, total_minutes = divmod(sum([ep_time
for title, ep_time, viewed in movies
if not viewed]), 60)
print(TIME_WATCHING.format(total_hours, total_minutes))
Enfin, intégrez ce code dans une fonction. Écrivez donc une fonction time_remaining
qui prend en paramètre une collection sur le format précédent et qui retourne un entier représentant le temps des épisodes restant à voir.
Afficher le temps total des épisodes restant à voir à l'aide de cette fonction, de la liste précédente et du template TIME_WATCHING
.
In [ ]:
def time_remaining(collection):
return sum([ep_time
for title, ep_time, viewed in collection
if not viewed])
total_hours, total_minutes = divmod(time_remaining(movies), 60)
print(TIME_WATCHING.format(total_hours, total_minutes))