Python - Trouver les mêmes valeurs dans une liste et regrouper une nouvelle liste
Je suis coincé essayant de se faire et me demande si quelqu'un pourrait me diriger dans la bonne direction...
À partir de cette liste:
N = [1,2,2,3,3,3,4,4,4,4,5,5,5,5,5]
Je suis en train de créer:
L = [[1],[2,2],[3,3,3],[4,4,4,4],[5,5,5,5,5]]
Toute valeur qui se trouve être le même regroupés dans une sous-liste.
Ici est une tentative de ma part pour l'instant, je suis en train de penser que je devrais utiliser un while
boucle?
global n
n = [1,2,2,3,3,3,4,4,4,4,5,5,5,5,5] #Sorted list
l = [] #Empty list to append values to
def compare(val):
""" This function receives index values
from the n list (n[0] etc) """
global valin
valin = val
global count
count = 0
for i in xrange(len(n)):
if valin == n[count]: # If the input value i.e. n[x] == n[iteration]
temp = valin, n[count]
l.append(temp) #append the values to a new list
count +=1
else:
count +=1
for x in xrange (len(n)):
compare(n[x]) #pass the n[x] to compare function
source d'informationauteur Siii
Vous devez vous connecter pour publier un commentaire.
Quelqu'un mentionne pour
N=[1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 1]
il obtiendra[[1], [2, 2], [3, 3, 3], [4, 4, 4, 4], [5, 5, 5, 5, 5], [1]]
En d'autres termes, lorsque les numéros de la liste n'est pas dans l'ordre ou il est un gâchis liste, il n'est pas disponible.
J'ai donc la meilleure solution pour résoudre ce problème.
Restez calme et utilisez
itertools.groupby
:De sortie:
Côté remarque: Éviter d'utiliser une variable globale lorsque vous n'avez pas besoin.
Vous pouvez utiliser
itertools.groupby
avec un compréhension de listeCela peut être affectée à la variable
L
comme dansVous êtes de compliquer à l'excès.
Ce que vous voulez faire est la suivante: pour chaque valeur, si c'est le même que la dernière valeur, juste de l'ajouter à la liste de la dernière valeur; sinon, créer une nouvelle liste. Vous pouvez traduire de l'anglais directement à Python:
Il y a même des moyens plus simples de faire cela si vous êtes prêt à obtenir un peu plus abstrait, par exemple, en utilisant les fonctions de regroupement dans
itertools
. Mais ce devrait être facile à comprendre.Si vous avez vraiment besoin de faire cela avec un
while
boucle, vous pouvez traduire n'importe quelfor
boucle dans unwhile
boucle comme ceci:Ou, si vous connaissez l'itérable est une séquence, vous pouvez utiliser un peu plus simple
while
boucle:Mais ces deux de rendre votre code moins lisible, moins Pythonic, plus compliqué, moins efficace, plus facile de se tromper, etc.
Un autre légèrement différente de la solution qui ne repose pas sur itertools: