2011-03-14 3 views
0

Quelle est la meilleure façon de partitionner une liste de tuples en python?Partitionnement d'une liste basée sur des valeurs dans tuples - Python

Actuellement, j'ai une liste triée de tuples, par le deuxième élément (une valeur), et je veux trouver toutes les valeurs qui sont répétées au début d'une manière efficace.

disent:

[ ("tearing", 3), ("me", 3), ("apart", 3), ("lisa", 3), 
    ("denny", 0), ("mark",0) ] 

Son exécution par la fonction reviendriez

[("tearing", 3), ("me", 3), ("apart", 3), ("lisa", 3)]. 

Mais je ne suis pas sûr de savoir comment s'y prendre.

+0

de ignacio Je ne savais pas ce film, et je voudrais exprimer mes plus sincères remerciements pour l'encodage d'une référence dans ces tuples. Je ne me souviens pas d'avoir ri de si bon cœur, et je n'exagère même pas. Ça a vraiment l'air d'utiliser ... –

Répondre

4
import itertools 
import operator 

L = [("tearing", 3), ("me", 3), ("apart", 3), ("lisa", 3), ("denny", 0), ("mark",0)] 

print list(itertools.groupby(L, operator.itemgetter(1)).next()[1]) 

# [('tearing', 3), ('me', 3), ('apart', 3), ('lisa', 3)] 

Mais vraiment, il n'y avait pas besoin de me rappeler ce film.

+0

Merci beaucoup, désolé si j'ai ruiné votre vie en ramenant ce mouvement. Avez-vous une suggestion de lecture en dehors des pythondocs pour des méthodes plus avancées liées à cela? – James

+1

Hrm. Pas vraiment. Tous ces trucs que j'ai ramassé soit en lisant les docs ou en consultant des gens plus expérimentés que moi. –

0

Une alternative à la réponse de @Ignacio Vazquez-Abrams, en utilisant la liste compréhensions:

>>> data=[ ("tearing", 3), ("me", 3), ("apart", 3), ("lisa", 3), ("denny", 0), ("mark",0) ] 
>>> print [x for x in data if x[-1]== data[0][-1]] 
[('tearing', 3), ('me', 3), ('apart', 3), ('lisa', 3)] 
0
from itertools import takewhile 

L = [("tearing", 3), ("me", 3), ("apart", 3), ("lisa", 3), ("denny", 0), ("mark",0)] 
first = L[0][1] 

print list(takewhile(lambda x : x[1] == first, L)) 

une petite variante de

Questions connexes