Python >> Tutoriel Python >  >> Python

Listes et compréhension de liste en Python

Everything you need to get started with lists and list comprehension in Python. 

Voici la nouvelle année - le moment idéal pour votre propre réévaluation personnelle et une rétrospective de l'année dernière. C'est aussi le moment idéal pour s'asseoir et rédiger une liste des résolutions du Nouvel An que vous prévoyez de réaliser au cours de l'année à venir. Allez-vous l'écrire sur papier ou allez-vous prendre votre ordinateur portable et, comme tout autre nerd, utiliser Excel ou un autre outil comme Python pour enregistrer et maintenir cette liste ?

Nous supposerons que vous aimez Python. Dans cet article, vous apprendrez à créer et à modifier une liste en Python. Vous apprendrez également à utiliser la construction de compréhension de liste pour créer une liste à partir d'une liste qui existe déjà.

Listes et création de listes en Python :les bases

L'un des objets de collection ou des séquences les plus célèbres et les plus utilisés en Python sont les listes. En Python, une liste peut être une collection de chaînes (comme une liste de résolution du Nouvel An) ou une collection de nombres (comme une liste de votre poids pour chaque mois de l'année dernière). Les listes peuvent également être plus complexes, comme une collection d'autres objets. Vous pourriez même faire une liste d'autres listes.

Voici un exemple de liste de chaînes. Notez comment il est créé en Python :

NewYearResolution = ["stop smoking", "lose weight", "join gym", "find a new job","enjoy life"]

Dans notre exemple, "NewYearResolution" est le nom de la liste. Chaque élément de cette liste est une chaîne. Entre crochets [ ], les éléments de la liste sont définis et séparés par une virgule. Notre liste comporte 5 résolutions (c'est-à-dire qu'il s'agit d'une liste de 5 éléments). Chaque résolution (élément) est indexée par un nombre (0,1,2,3 ou 4). Le premier élément, "arrêter de fumer", a un indice de 0 et peut être atteint avec la commande NewYearResolution[0] . Le deuxième élément, "perdre du poids", a un indice de 1 et peut être atteint avec NewYearResolution[1] , etc. Le dernier élément, "profiter de la vie", peut être atteint avec NewYearResolution[4] .

Voici comment créer une liste en Python et accéder à chaque élément de la liste. Si vous n'êtes pas familier avec les listes et autres objets Python et que vous souhaitez approfondir vos connaissances, consultez les cours interactifs en ligne de LearnPython.com pour les débutants en Python :

  • Les bases de Python – Partie 1
  • Les bases de Python – Partie 2
  • Les bases de Python – Partie 3

Le cours Python Data Structures explique les structures de données de Python (y compris les listes); cela pourrait vous être utile comme prochaine étape après avoir acquis des compétences de base en Python.

Travailler avec des listes Python

Les listes sont des objets modifiables

Il est important de savoir que les listes sont modifiables - vous pouvez ajouter, supprimer ou modifier des éléments de liste après la création de la liste.

Les listes sont des objets modifiables

Par exemple, si vous souhaitez modifier le cinquième élément de la liste NewYearResolution pour "réduire le stress", vous pouvez simplement faire ceci :

NewYearResolution[4]="reduce stress"

Nous disons à Python que le cinquième élément (celui avec l'indice 4) doit être défini comme "réduire le stress". Après l'exécution de cette instruction, notre liste est modifiée et ressemble maintenant à ceci :

Liste après modification du cinquième élément

Insérer et supprimer des éléments d'une liste existante

Bien sûr, nous avons mentionné que vous pouvez également ajouter ou supprimer des éléments d'une liste.

Le ajouter() fonction ajoute un élément à la fin d'une liste

Si vous souhaitez ajouter une autre résolution à la NewYearResolution list, vous pouvez le faire en appelant le append() fonction :

NewYearResolution.append("get more sleep")

Maintenant, si vous tapez NewYearResolution , Python renvoie ce qui suit dans l'écran de sortie :

['stop smoking', 'lose weight', 'join gym', 'find a new job', 'reduce stress','get more sleep']

Ajouter un élément à la dernière position

Comme vous l'avez peut-être remarqué, la nouvelle résolution est en dernière position sur la liste. Le append() La fonction ajoute toujours un élément ou l'ajoute à la fin. Si vous ne voulez pas que le nouvel élément soit en dernière position, vous pouvez utiliser insert() fonction pour spécifier exactement où vous voulez placer votre élément.

Le insérer() fonction ajoute un élément dans une position spécifique

Par exemple, si vous voulez mettre la résolution "manger sainement" à la troisième place, vous appelleriez insert() comme ceci :

NewYearResolution.insert(2,"eat healthy") 

Le premier argument est 2, qui est la position d'index où vous voulez placer l'élément "manger sainement". Cela signifie que "manger sainement" sera présenté comme le troisième élément de la liste.

Outre l'insertion d'un élément, vous pouvez également supprimer des éléments. Utilisez simplement le remove() fonction, comme ceci :

NewYearResolution.remove("join gym") 

Après avoir appelé cette instruction, Python supprimera définitivement "join gym" de la liste.

Suppression de "join gym " de la liste

Itérer dans une liste

Ajouter, supprimer ou modifier un élément est facile, mais que se passe-t-il lorsque vous souhaitez appliquer des modifications ou des transformations à chaque élément de la liste ? Dans ce cas, vous devez parcourir toute une séquence ; vous pouvez le faire en utilisant un for boucle.

Organigramme d'un pour boucle

Voici un exemple de la façon dont vous pouvez imprimer chaque élément de la NewYearResolution liste avec un pour boucle :

for resolution in NewYearResolution:
     print(resolution)

Nous parcourons toute la liste et imprimons le contenu de chaque élément sur la console de sortie. Nous utilisons une liste existante et appliquons un print() commande à chaque élément. Dans ce cas, nous n'avons pas créé de liste ni modifié les éléments de la liste ; nous avons simplement parcouru toute une liste et imprimé le contenu.

Nous pouvons également utiliser un pour boucle pour créer une liste basée sur une ou plusieurs listes existantes. Passons en revue un exemple simple en utilisant une liste des acteurs les mieux payés de 2019. Voici la liste :

highest_paid_actors = ["Will Smith", "Paul Rudd" ,"Chris Evans" ,"Adam Sandler" ,"Bradley Cooper","Jackie Chan" ,"Akshay Kumar" ,"Robert Downey Jr." ,"Chris Hemsworth" ,"Dwayne Johnson" ]

Voyons maintenant leurs dates de naissance respectives. (Certains n'ont même pas 40 ans et ont déjà tant gagné !)

highest_paid_actors_birthdate = ["25.9.1968","6.4.1969","13.6.1981","9.9.1966","5.1.1975","7.4.1954","9.9.1967","4.4.1965","11.8.1983","2.5.1972"]

Supposons que nous voulions extraire l'année de la date de naissance de chaque acteur et l'enregistrer dans une autre liste nommée highest_paid_actors_birthyear . Voici un pour boucle qui le fait :

import datetime
highest_paid_actors_birthyear=[]
for birthdate in highest_paid_actors_birthdate:
     birthdate_year = datetime.datetime.strptime(birthdate,"%d.%m.%Y").year
     highest_paid_actors_birthyear.append(birthdate_year)

Nous avons d'abord initialisé une liste vide nommée highest_paid_actors_birthyear :

We first initialized an empty list named highest_paid_actors_birthyear: 

Ensuite, nous avons utilisé une boucle for pour parcourir toute la séquence. Pour chaque date de naissance, nous avons exécuté une instruction qui convertit la chaîne de date de naissance en une date/heure (un type de données qui inclut les informations de date et d'heure) et extrait l'année :

datetime.datetime.strptime(birthdate,"%d.%m.%Y").year 

Pour cette extraction, nous avons utilisé les fonctions strptime() et year, qui font partie du module datetime de Python. Parce que nous travaillons avec des dates et avons besoin de ces fonctions, nous importons d'abord le datetime module pour y accéder. Ensuite, nous pouvons utiliser les fonctions.

L'année la valeur est ensuite stockée dans birthdate_year variable, qui est ensuite ajoutée à une nouvelle liste nommée highest_paid_actors_birthyear . Une fois cette boucle for exécutée, notre liste nouvellement créée highest_paid_actors_birthyear ressemble à ceci :

[1968, 1969, 1981, 1966, 1975, 1954, 1967, 1965, 1983, 1972]

Années de naissance des acteurs les mieux payés de 2019

Compréhension des listes en Python

L'exemple précédent montrait comment créer une liste à partir d'une autre liste en utilisant un for boucle. Cependant, il existe une autre approche que nous pouvons utiliser appelée « compréhension de liste ». C'est une façon élégante de créer des listes tout en évitant la construction de la boucle for. Avec la compréhension de liste, une nouvelle liste peut être créée avec une seule ligne de code ; cela rend le code Python plus facile à lire et à maintenir.

Ainsi, plutôt que de créer une liste vide et d'ajouter chaque élément à la fin, nous pourrions initialiser la liste et son contenu en même temps, dans la même instruction, en utilisant la compréhension de liste.

En Python, la syntaxe pour la compréhension de liste ressemble à ceci :

[ expression for item in a list {if condition_is_met} ]

La compréhension de la liste est définie entre crochets [ ]. Cela nous rappelle que l'objet résultant est définitivement une liste.

Entre parenthèses, une expression est défini. Il s'agit d'une instruction qui renvoie une valeur spécifique pour chaque élément d'une liste existante. Avec le code "pour un élément dans une liste ", nous définissons la séquence que nous voulons parcourir. Nous pouvons également définir un if instruction conditionnelle à l'intérieur des crochets pour filtrer les éléments d'une liste existante.

Maintenant que nous savons ce qu'est la compréhension de liste, nous pouvons facilement réécrire le for boucle de notre dernier exemple...

import datetime
highest_paid_actors_birthyear=[]
for birthdate in highest_paid_actors_birthdate:
    birthdate_year = datetime.datetime.strptime(birthdate,"%d.%m.%Y").year
    highest_paid_actors_birthyear.append(birthdate_year)

... dans quelque chose comme ça :

import datetime
highest_paid_actors_birthyear = [datetime.datetime.strptime(birthdate,"%d.%m.%Y").year for birthdate in highest_paid_actors_birthdate]

Comme vous l'avez peut-être remarqué, plusieurs lignes de code dans le for boucle ne sont pas présents dans la compréhension de la liste. Pour commencer, avec la compréhension de liste, nous n'avons pas besoin d'initialiser une liste vide, c'est-à-dire que nous n'avons pas besoin de la déclaration highest_paid_actors_birthyear=[] .

Utilisation de append() dire à Python que chaque nouvel élément doit être ajouté à la fin est également inutile ; nous n'avons pas besoin d'utiliser append() en compréhension de liste. Au lieu de cela, nous définissons simplement la variable highest_paid_actors_birthyear et affecter le résultat de compréhension de liste à cette variable.

Dans notre exemple, l'expression est défini comme :

datetime.datetime.strptime(birthdate,"%d.%m.%Y").year 

Ceci est appliqué sur chaque élément de la liste highest_paid_actors_birthdate . Cette déclaration renvoie l'année pour chaque date de naissance et stocke les résultats dans une nouvelle liste nommée highest_paid_actors_birthyear .

Un code écrit comme celui-ci est plus facile à comprendre. C'est pourquoi la compréhension de liste est très connue et très appréciée des programmeurs Python.

N'oubliez pas que nous pouvons également utiliser un conditionnel if déclaration avec compréhension de liste. Nous utilisons si pour ne sélectionner que certains éléments répondant à des critères définis. Voici un exemple :

[birthyear for birthyear in highest_paid_actors_birthyear if birthyear>1970]

Ici, nous avons le si déclaration si année de naissance>1970 . Cela signifie que Python ne prendra que ces éléments (années de naissance) de la liste highest_paid_actors_birthyear qui sont supérieurs à 1970. L'expression ne sera exécutée que sur ces éléments, ce qui signifie que Python renverra une liste filtrée.

Le résultat sera une liste contenant quatre éléments représentant les années de naissance des acteurs les mieux payés de 2019 - mais uniquement lorsque ces acteurs sont nés après 1970 :

[1981, 1975, 1983, 1972]

Compréhension de la liste avec un if instruction conditionnelle

List Comprehension comme alternative à Map()

La compréhension de liste peut remplacer l'instruction map() tout comme elle le fait pour for boucle.

Le map() applique une fonction à chaque élément d'une séquence

Carte() est utilisé lorsque nous voulons qu'une fonction s'applique à chaque élément d'une liste. Par exemple :

def calc_age(x):
      return datetime.date.today().year — x
actors_ages = map(age, highest_paid_actors_birthyear)
list(actors_ages)

Au début de ce code, nous définissons la fonction calc_age() . En appelant cette fonction, Python prendra une année de date de naissance et renverra l'âge d'une personne. Ceci est calculé comme l'année en cours moins l'année de naissance. Maintenant que nous avons le calc_age() fonction, nous pouvons utiliser map() pour appliquer cette fonction à chaque élément de highest_paid_actors_birthyear :

map(calc_age,highest_paid_actors_birthyear) 

Carte() renvoie un objet cartographique (actors_ages ). Si nous voulons voir le contenu (et nous le faisons), nous devons appliquer la list() fonction (list(actors_ages )).

Voyons maintenant à quoi cela ressemble lorsque nous utilisons la compréhension de liste au lieu d'un map() déclaration :

def calc_age(x):
return datetime.date.today().year — x
actors_ages = [calc_age(birthyear) for birthyear in highest_paid_actors_birthyear]

Entre crochets [ ], notre expression est définie comme calc_age(birthyear) . Le pour année de naissance dans l'année de naissance_des_acteurs_les_plus_hauts_payés part nous indique la séquence à travers laquelle nous voulons itérer.

Notez que nous avons obtenu le même résultat qu'en utilisant la map() fonction et nous n'avions besoin que d'une ligne de code en dehors de la définition de la fonction.

Qu'avons-nous appris sur les listes Python et la compréhension des listes ?

  • Une liste est une séquence d'un ou plusieurs éléments. En Python, il est créé en plaçant tous les éléments entre crochets. Les éléments de la liste sont séparés par des virgules.
  • Les listes sont des objets modifiables. Après la création de la liste, nous pouvons ajouter, supprimer ou modifier des éléments.
  • Les listes sont ordonnées et indexées, ce qui signifie qu'un numéro est attribué à chaque élément indiquant sa position dans la séquence. L'élément qui est indexé avec 0 est le premier élément d'une liste, l'élément avec l'index 1 est le second, et ainsi de suite.
  • Lorsque nous voulons parcourir une liste entière et appliquer une ou plusieurs instructions de code à chaque élément, nous pouvons utiliser for les boucles ou la map() fonction.
  • List comprehension est une alternative élégante à for les boucles et la map() fonction. Cela nous permet de parcourir une liste et de créer une nouvelle liste à partir d'une liste existante avec très peu de code.

Dans cet article, nous avons appris la syntaxe de liste, la syntaxe de compréhension de liste et pourquoi il est bon d'utiliser la compréhension de liste au lieu de map() ou pour boucles. Si vous souhaitez en savoir plus sur les listes Python, je vous suggère de suivre les cours LearnPython.com Python mentionnés ci-dessus. Profitez de votre apprentissage et bonne chance pour travailler avec les listes et la compréhension des listes !