Il existe une expression spéciale en Python appelée dérivation . Sa fonction est de prendre une structure de données en entrée, puis de la filtrer et de la calculer, et enfin de générer une autre structure de données. Selon différentes structures de données, elle peut être divisée en compréhension de liste, compréhension d'ensemble et compréhension de dictionnaire. Concentrons-nous d’abord sur les compréhensions de listes les plus couramment utilisées.
Jetons d'abord un coup d'œil au format syntaxique des compréhensions de listes :
listname=[expression pour variable dans l'objet (ifcondition)]
listname : le nom de la liste nouvellement générée.
expression : expression.
variable : nom de la variable.
(si condition) : utilisé pour sélectionner une liste qui répond aux exigences de l'objet.
Nous partons de trois aspects : une liste de valeurs dans une plage spécifiée, une liste de conditions spécifiées et une liste composée d'éléments qui remplissent les conditions.
Réfléchissons d'abord au moment où nous devons générer 10 nombres et les stocker dans une liste. Examinons d'abord la manière courante :
listname=[]foriinrange(10):listname.append(i)print(listname)
Le résultat est :
[0,1,2,3,4,5,6,7,8,9]
L'utilisation d'une compréhension de liste ne nécessite qu'une seule ligne :
nom de liste=[iforiinrange(10)]
Le résultat est :
[0,1,2,3,4,5,6,7,8,9]
Cette approche simplifie nos opérations lors de la définition de listes.
Supposons que nous sachions qu'une liste est listname = [1,3,5,6,7,9,10,23,26,28,64,98]. Nous voulons la trouver et additionner tous les nombres par 5. La méthode ordinaire :
listname=[1,3,5,6,7,9,10,23,26,28,64,98]foriinrange(len(listname)):listname[i]+=5print(listname)
Le résultat est :
[6,8,10,11,12,14,15,28,31,33,69,103]
L'utilisation des compréhensions de listes est également très concise :
nom de liste=[1,3,5,6,7,9,10,23,26,28,64,98]nom de liste=[i+5foriinlistname]
Sortir:
[6,8,10,11,12,14,15,28,31,33,69,103]
Ce type de compréhension de liste est plus complexe que les deux premiers, mais il peut simplifier davantage le code.
Prenons un exemple pour regarder le format du code :
On sait qu'une liste est listname = [8,33,53,64,73,95,101,123,126,164,198], alors nous devons trouver les nombres dans la liste qui sont inférieurs et supérieurs à 100, puis les multiplier par 0,8, et enfin renvoyez-les à la liste.
Si nous utilisons la méthode normale :
listname=[10,20,30,40,60,120,130,140,160,180,200]newlist=[]#Créer une nouvelle liste à stocker pouriinrange(len(listname)):#Parcours de la valeur d'index iflistname[i]>100:#Trouver un nombre supérieur à 100 listname[ i]*=0.8#Multiplier par 0.8 newlist.append(listname[i])#Ajouter à une nouvelle liste print(newlist)
Le résultat est :
[96.0,104.0,112.0,128.0,144.0,160.0]
Utiliser les compréhensions de liste :
listname=[10,20,30,40,60,120,130,140,160,180,200]newlist=[i*0.8foriinlistnameifi>100]print(nouvelle liste)
Résultat de sortie :
[96.0,104.0,112.0,128.0,144.0,160.0]
Analysons-le en fonction de la structure grammaticale de cet exemple :
Nous pouvons utiliser cette méthode lors de l'utilisation de compréhensions de listes complexes. On peut comprendre que nous sélectionnons d'abord les éléments qui remplissent les conditions (instructions conditionnelles) de l'objet, puis traitons l'expression de sortie et enfin les stockons dans la liste, formant une. nouvelle liste.
Voici quelques exemples de questions que vous pouvez essayer.
1. Liste [1,2,13,22,25], veuillez utiliser la compréhension de liste pour extraire les nombres supérieurs à 10, mettre au carré chaque nombre et enfin sortir.
Le résultat courant est :
[169 484 625]
Le code est le suivant, vous pouvez d'abord essayer de compléter la réponse de référence.
list=[1,2,13,22,25]newlist=[i*iforiinlistifi>10]print(nouvelle liste)
2. Utilisez la compréhension de liste pour trouver tous les nombres impairs de la liste et construire une nouvelle liste, list= [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Le code est le suivant :
list=[1,2,3,4,5,6,7,8,9,10]newlist=[iforiinlistifi%2==1]print(nouvelle liste)
Le résultat est :
[1,3,5,7,9]