Python >> Tutoriel Python >  >> Python

Python une ligne pour la boucle Lambda

Problème :Étant donné une collection. Vous souhaitez créer une nouvelle liste basée sur toutes les valeurs de cette collection. Le code doit s'exécuter sur une seule ligne de code. Comment accomplissez-vous cela? Avez-vous besoin d'une fonction lambda ?

Exemple :Soit un tableau a = [1, 2, 3, 4] . Vous devez créer un deuxième tableau b avec toutes les valeurs de a —en ajoutant +1 à chaque valeur. Voici votre multiligne :

a = [1, 2, 3, 4]
b = []
for x in a:
    b.append(x+1)
print(b)
# [2, 3, 4, 5]

Comment y parvenir en une seule ligne de code ?

Répondre :Non, vous n'avez pas besoin d'une fonction lambda. Ce que vous recherchez est une fonctionnalité appelée compréhension de liste. Voici l'expression à une ligne qui accomplit cela sans la fonction lambda :

b = [x+1 for x in a]
print(b)
# [2, 3, 4, 5]

Vous pouvez essayer cet exemple vous-même dans notre shell de code interactif :

Plongeons-nous dans quelques informations générales au cas où vous vous demanderiez comment fonctionnent les compréhensions de liste. Sur la base de votre question, je soupçonne également que vous ne comprenez pas complètement les fonctions lambda non plus, donc j'ajouterai également une autre section sur les fonctions lambda. Enfin, vous découvrirez également une troisième méthode alternative pour résoudre ce problème exact en utilisant la fonction lambda en combinaison avec la fonction intégrée map() de Python !

Alors, restez avec moi, vous deviendrez un meilleur codeur dans le processus ! 🙂

Compréhension de la liste 101

La compréhension de liste est une manière compacte de créer des listes. La formule simple est [expression + context] .

  • Expression : Que faire de chaque élément de la liste ?
  • Contexte : Quels éléments sélectionner ? Le contexte consiste en un nombre arbitraire de for et if déclarations.

L'exemple [x for x in range(3)] crée la liste [0, 1, 2] .

Jetez un œil à l'extrait de code interactif suivant :pouvez-vous comprendre ce qui est imprimé sur le shell ? Allez-y et cliquez sur "Exécuter" pour voir ce qui se passe dans le code :

J'expliquerai les deux manières de générer une nouvelle liste dans ce qui suit.

Exemple :Supposons que vous souhaitiez filtrer tous les clients de votre base de données qui gagnent plus de 1 000 000 $. Voici ce que ferait un débutant ne connaissant pas la compréhension des listes :

# (name, $-income)
customers = [("John", 240000),
             ("Alice", 120000),
             ("Ann", 1100000),
             ("Zach", 44000)]

# your high-value customers earning <$1M
whales = []
for customer, income in customers:
    if income>1000000:
        whales.append(customer)
print(whales)
# ['Ann']

Cet extrait nécessite quatre lignes uniquement pour créer une liste de clients de grande valeur (baleines) !

Au lieu de cela, une bien meilleure façon de faire la même chose est d'utiliser la compréhension de liste :

whales = [x for x,y in customers if y>1000000]
print(whales)
# ['Ann']

La compréhension de la liste est extrêmement simple lorsque vous connaissez la formule.

Voici la formule pour la compréhension de liste. C'est la seule chose que vous devriez retenir de ce tutoriel.

Formule :la compréhension de la liste se compose de deux parties.

‘[‘ + expression + contexte + ‘]’

La première partie est l'expression. Dans l'exemple ci-dessus c'était la variable x . Mais vous pouvez également utiliser une expression plus complexe telle que x.upper() . Utilisez n'importe quelle variable dans votre expression que vous avez définie dans le contexte d'une instruction de boucle. Voir cet exemple :

whales = [x.upper() for x,y in customers if y>1000000]
print(whales)
# ['ANN']

La deuxième partie est le contexte . Le contexte consiste en un nombre arbitraire de clauses for et if. Le but unique du contexte est de définir (ou de restreindre) la séquence d'éléments sur laquelle on veut appliquer l'expression. C'est pourquoi vous voyez parfois des restrictions complexes comme celle-ci :

small_fishes = [x + str(y) for x,y in customers if y<1000000 if x!='John']
# (John is not a small fish...)
print(small_fishes)
# ['Alice120000', 'Zach44000']

Albrecht, l'un des fidèles lecteurs de mon cours par e-mail "Coffee Break Python", a souligné que vous pouvez décomposer la formule plus en détail en utilisant le schéma suivant :

lst = [<expression> for <item> in <collection> if <expression>] 

Un tutoriel détaillé sur le sujet est disponible gratuitement sur ce tutoriel sur le blog Finxter.

Fonction Lambda 101

Une fonction lambda est une fonction anonyme en Python. Il commence par le mot-clé lambda , suivi d'une liste de zéro ou plusieurs arguments séparés par des virgules, suivis des deux-points et de l'expression de retour. Par exemple, lambda x, y, z: x+y+z calculerait la somme des trois valeurs d'argument x+y+z .

Voici un exemple pratique où les fonctions lambda sont utilisées pour générer une fonction d'incrémentation :

Exercice :Ajoutez un autre paramètre à la fonction lambda !

Regardez la vidéo ou lisez l'article pour en savoir plus sur les fonctions lambda en Python :

Casse-tête . Voici un petit puzzle de code pour tester vos compétences :

def make_incrementor(n):
   return lambda x: x + n
f = make_incrementor(42)
print(f(0))
print(f(1))

Pour tester votre compréhension, vous pouvez résoudre ce puzzle de code exact avec le sujet "Fonctions lambda en Python" dans mon application de puzzle de code Finxter.

Retrouvez l'article détaillé sur les fonctions lambda ici.

Méthode alternative 3 :map() + lambda + list()

Fait intéressant, il existe une troisième façon de résoudre le problème ci-dessus en utilisant le map() fonction (et la fonction lambda):

# Method 3: map() + lambda + list()
a = [1, 2, 3, 4]
b = list(map(lambda x: x+1, a))
print(b)
# [2, 3, 4, 5]

Vous pouvez en savoir plus sur le map() fonction dans mon tutoriel vidéo ici :

Cependant, il serait préférable que vous évitiez la fonction de carte - elle n'est pas lisible et moins efficace que la compréhension de liste.


Post précédent
Prochain article