Les deux génèrent des listes, mais elles sont utilisées différemment, je vais donc les résumer légèrement.
Une des méthodes courantes pour écrire des méthodes de type carte. Python a également une méthode de carte, mais l'inclusion de liste est plus rapide, alors utilisons-la.
Notation d'inclusion de liste
names = ['Alice', 'Bob', 'Carl', 'Dave']
[name[0] for name in names] # => ['A', 'B', 'C', 'D']
méthode de carte
names = ['Alice', 'Bob', 'Carl', 'Dave']
map(lambda name: name[0], names) # => ['A', 'B', 'C', 'D']
Il peut être utilisé lorsque vous souhaitez créer une nouvelle liste d'éléments qui remplissent les conditions de la liste. Il est possible d'écrire plusieurs conditions en continuant si, et bien sûr, vous pouvez également écrire avec et.
names = ['Alice', 'Bob', 'Carl', 'Dave']
[name for name in names if len(name) == 4] # => ['Carl', 'Dave']
[name for name in names if not len(name) == 4] # => ['Alice', 'Bob']
[name for name in words if not len(name) == 4 if len(name) < 5] # => ['Bob']
[name for name in words if not len(name) == 4 and len(name) < 5] # => ['Bob']
Vous pouvez créer une nouvelle liste à partir de plusieurs listes en même temps en utilisant zip.
namesA = ['Alice', 'Bob', 'Carl', 'Dave']
namesB = ['Peter', 'Micheal', 'John', 'Harry']
[" ".join([x, y]) for x, y in zip(namesA, namesB)]
# => ['Alice Peter', 'Bob Micheal', 'Carl John', 'Dave Harry']
Plusieurs boucles peuvent être exprimées en se chevauchant pour.
namesA = ['Alice', 'Bob', 'Carl', 'Dave']
namesB = ['Peter', 'Micheal', 'John', 'Harry']
[" ".join([x, y]) for x in namesA for y in namesB]
# => ['Alice Peter',
# 'Alice Micheal',
# 'Alice John',
# 'Bob Peter',
# 'Bob Micheal',
# 'Bob John',
# 'Carl Peter',
# 'Carl Micheal',
# 'Carl John',
# 'Dave Peter',
# 'Dave Micheal',
# 'Dave John']
Le générateur peut générer des éléments à partir des expressions définies. Vous pouvez récupérer la valeur du générateur avec next.
g = (x ** 2 for x in range(5))
next(g) # => 0
next(g) # => 1
next(g) # => 4
next(g) # => 16
next(g) # StopIteration
En utilisant un générateur, vous pouvez arrêter de générer des valeurs lorsque les conditions sont remplies. Il existe cependant d'autres utilisations.
Bonus itertools
Il existe un module Python appelé itertools, qui a des méthodes bien implémentées pour générer des itérateurs.
Par exemple, lorsque vous souhaitez énumérer des combinaisons
import itertools
itertools.combinations('ABCD', 2) # => (A,B) (A,C) (A,D) (B,C) (B,D) (C,D)
Notez que cela ne crée qu'un itérateur, pas une liste.
C'est ici que vous pouvez apprendre une si petite notation tout en résolvant des problèmes. Udacity Design of computer programming
Blog faisant (ou essayant) du machine learning avec Python Blog Effort 1mm
Recommended Posts