Notez la méthode de description concise pour résumer la séquence de nombres monotones croissants pour chaque valeur consécutive.
import itertools
sample = [1,2,3,5,6,7,9,10]
[list(g) for _, g in itertools.groupby(
sample, key=lambda n, c=itertools.count(): n - next(c))]
# => [[1, 2, 3], [5, 6, 7], [9, 10]]
[ʻItertools.groupby](https://docs.python.org/3.9/library/itertools.html#itertools.groupby) passe chaque élément de l'itérable du premier argument au deuxième argument et retourne. Renvoie un itérateur qui renvoie des éléments consécutifs avec la même valeur, ainsi que les éléments passés à la deuxième fonction argument. Dans l'exemple ci-dessus, le premier argument est "sample" et le second argument "key" est une expression lambda. L'expression lambda a deux arguments,
n et optionnel
c, mais
cest spécifié par la valeur par défaut de ʻitertools.count ()
, et est continue dans groupby
. Lorsqu'il est appelé lors de la détermination de l'identité des éléments à utiliser, chaque élément de «sample» est passé à «n». ʻItertools.count () produit un itérateur qui renvoie un nombre qui s'incrémente de" 1 "à partir de" 0 ". La valeur par défaut de
c est exécutée une seule fois lorsque l'expression lambda est définie et un itérateur qui renvoie le nombre
+ 1` dans l'ordre à partir de 0 est affecté. Ainsi, pour «n --next (c)», «next (c)» augmente de «1» à chaque appel, donc «n» augmente de «1» et la même valeur est obtenue à partir de cette expression lambda. Il sera retourné, mais une valeur différente sera renvoyée si «n» augmente plus que «1». L'itérateur qui retourne des éléments consécutifs avec la même valeur de retour de cette expression lambda est «g», et «list (g)» génère une liste d'éléments consécutifs dans une liste imbriquée par notation d'inclusion de liste.
Recommended Posts