Élément de mémo Python efficace 9 Considérons une expression de générateur pour la notation d'inclusion de grande

** Notes sur Python efficace ** Point 9 Considérons une formule génératrice pour la notation à grande inclusion (p18 ~ 20)

Utilisez des générateurs lorsque vous travaillez avec de grandes listes

Il y a quelques problèmes avec le traitement des inclusions avec de grandes quantités de données.

  1. (Selon le processus) peut générer une nouvelle liste
  2. Lors de l'appel d'une instruction de boucle, etc., tout est développé en mémoire, ce qui peut provoquer une panne de mémoire.

Le générateur résout également ces problèmes. L'avantage du générateur est qu'il n'appelle pas à chaque fois la séquence entière. Puisqu'il est appelé un par un et traité, il n'y a presque pas de problème de dépassement de mémoire.

L'expression du générateur a une syntaxe similaire à la notation d'inclusion et est écrite entre () au lieu de [].

my_lists = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
it = (x for x in my_lists)
print(it)

>>>
<generator object <genexpr> at 0x103fe93a8>

※Mise en garde C'est l'objet générateur qui est retourné par l'expression générateur, pas la valeur. Pour générer une valeur, utilisez la fonction next () pour générer la valeur. Encore une fois, le générateur ne génère aucune valeur!

print(next(it))
print(next(it))

>>>
1
2

De plus, l'itérateur renvoyé par un générateur peut être immédiatement affecté à un autre générateur.

my_lists = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
it = (x for x in my_lists)
roots = ((x, x ** 0.5) for x in it)
print(next(roots))
print(next(roots))

>>>
(1, 1.0)
(2, 1.4142135623730951)

Résumé

Nous n'avons pas prévu le temps de traitement cette fois, mais en raison des caractéristiques du générateur, cela ne prendra pas beaucoup de temps. C'est donc une fonction très pratique pour traiter des données à grande échelle.

Recommended Posts

Élément de mémo Python efficace 9 Considérons une expression de générateur pour la notation d'inclusion de grande
EP 9 Considérer les expressions de générateur pour les grandes compréhensions
Élément de mémo Python efficace 3
Élément de mémo Python efficace 8 Évitez trois expressions ou plus dans la notation d'inclusion de liste
Élément de note Python efficace 16 Envisagez de renvoyer un générateur sans renvoyer une liste
Mémo Python efficace Élément 10 Énumérer à partir de la plage
Mémo Python (pour moi): Array
Mémo de code personnel Python
Élément de mémo Python efficace 19 Donner un comportement facultatif aux arguments de mot-clé
Élément de mémo Python efficace 11 Utilisez zip pour traiter les itérateurs en parallèle
Point 17 de la note Python efficace Respect de la certitude lors de l'utilisation d'itérateurs pour les arguments
Élément de mémo Python efficace 4 Écrire une fonction d'aide au lieu d'une expression compliquée
Élément de mémoire Python efficace 7 Utilisez la notation d'inclusion de liste au lieu de la carte et du filtre
Notation inclusive de Python (à propos de l'expression de liste et de générateur) [supplémentaire]
Élément de mémo Python efficace 18 Utilisez des arguments de position de longueur variable pour rendre l'apparence plus propre
Élément de note Python efficace 12 Évitez d'utiliser des blocs else après les boucles for et while