Élément 5: Utilisez la notation d'inclusion de liste au lieu de map et filter (p15 ~ 16)
Les fonctions d'ordre supérieur sont fonctionnelles et sympas (?), Mais comme elles génèrent des lambdas une par une, elles sont difficiles à lire à moins que vous n'y soyez habitué. Il semble que M. Guido déteste les fonctions d'ordre supérieur en premier lieu, et il y aura un nombre limité de situations où il les utilisera activement.
Si vous pouvez utiliser la notation d'inclusion, écrivez-la dans la notation d'inclusion!
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#Écrivez une expression qui met au carré chaque séquence
# map()dans le cas de
squares = map(lambda x: x ** 2, a)
print(list(squares))
>>>
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
#En cas de notation d'inclusion
squares = [x ** 2 for x in a]
print(squares)
>>>
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Ce dernier est plus facile à voir, n'est-ce pas? Ajoutons une condition pour extraire uniquement les nombres pairs
#Seuls les nombres pairs sont mis au carré et extraits
# map()Et filtre()Si vous écrivez
even_squares = map(lambda x: x**2, filter(lambda x: x % 2 == 0, a))
print(list(even_squares))
>>>
[4, 16, 36, 64, 100]
#En cas de notation d'inclusion
even_squares = [x **2 for x in a if x % 2 == 0]
print(even_squares)
>>>
[4, 16, 36, 64, 100]
C'est plus clair! Il n'y a pas de place pour l'hésitation
À propos, la notation d'inclusion peut être utilisée non seulement pour les listes mais également pour les dictionnaires et les ensembles.
#Inverser les clés et les valeurs du dictionnaire, créer de nouveaux dictionnaires
chile_ranks = {'ghost': 1, 'habanero': 2, 'cayenne': 3}
rank_dist = {rank: name for name, rank in chile_ranks.items()}
chile_len_set = {len(name) for name in rank_dist.values()}
print(rank_dist)
print(chile_len_set)
>>>
{1: 'ghost', 2: 'habanero', 3: 'cayenne'}
{8, 5, 7}
Les fonctions d'ordre supérieur ne sont pas mauvaises, mais il est préférable d'écrire du code en mettant l'accent sur la lisibilité. (Sauf pour ceux qui aiment vraiment le type de fonction ...)
Recommended Posts