Je souhaiterai compter dans une liste contenant des 0 et des 1 les groupes consécutifs de 1 dans une liste. Je m'explique :
pour [0,1,0,0,0] je voudrai trouver : [1] --> il y a 1 groupement de 1 fois "1"
pour [0,0,1,1,0] je voudrai trouver : [2] --> il y a 1 groupement de 2 fois "1"
pour [1,1,0,1,1] je voudrai trouver : [2,2] --> il y a 2 groupements de 2 fois "1"
Est-ce que vous pourriez m'aider à faire sortir ce résultat ? J'ai d'abord penser partir sur des boucles s’arrêtant au premier 1 rencontré, mais je n'arrive pas à compter le nombre de "1" consécutifs. En plus à chaque fois qu'un groupement est terminé il faudrait créer une autre variable pour le prochain groupement, et je ne vois pas comment faire sachant que le nombre de groupement n'est pas identique suivant la liste...
Désolé des explications peu claires, ce n'est pas facile à expliquer. Si vous n'avez pas compris n'hésitez pas à me le dire, j'essaierai de reformuler.
Tout dépend du problème initial que tu as à résoudre.
Si cette fonction constitue un exercice d'algorithmique à part entière, continue sur ta lancée : tu itères sur ta liste avec un compteur. Chaque fois que tu rencontres un 1, tu augmentes le compteur. Chaque fois que tu rencontres un 0, tu insères la valeur du compteur dans une liste de résultats, puis tu réinitialises ce compteur.
N'oublie pas de procéder de même une fois toute la liste parcourue, pour les cas où tu n'as pas de 0 en fin de liste et donc que la dernière valeur du compteur n'est pas prise en compte.
En revanche, si elle n'est qu'un outil dont tu as besoin pour un problème plus conséquent, je te propose une solution à base de groupby du module itertools, qui va ici nous permettre de regrouper les valeurs identiques consécutives de ta liste.
>>> from itertools import groupby
>>> def groups(l):
... return [sum(g) for i, g in groupby(l) if i == 1]
...
>>> groups([0,1,0,0,0])
[1]
>>> groups([0,0,1,1,0])
[2]
>>> groups([1,1,0,1,1])
[2, 2]
Merci beaucoup pour vos réponses, je vais essayer de mettre cela en place.
Entwanne : Oui en effet ce serait une petite fonction que j'utilise pour quelque chose de plus gros, mais relativement modeste donc je me contenterai de la première solution. Concernant la deuxième, je ne connais pas le module, j'y jetterai un oeil, merci.
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique