2011-08-11 10 views

Odpowiedz

26
[list(g) for k, g in itertools.groupby(iterable)] 

To jest dokładnie to, co jest dla itertools.groupby.

Jeśli chcesz numery niesąsiadujące zgrupowane, jak w komentarzu przez @Michal,

[list(g) for k, g in itertools.groupby(sorted(iterable))] 
+0

Dobra sztuczka. Po co byłoby to rozwiązanie? Mam na myśli iterables of ints, floats, stringi, myślę, że to jest w porządku. Co powiesz na iterables z twoich własnych obiektów klasy? Czy będą działać, jeśli wdrożony zostanie __eq__ lub __hash__? – Bogdan

+1

Tak długo, jak będą porównywać równe, będzie działać; kod odpowiadający implementacji znajduje się w linku w mojej odpowiedzi. Tak więc zaimplementuj '__eq__' (a także' __hash__', ponieważ obiekty, które są równe, muszą mieszać to samo) i będzie działać. – agf

+3

Nie potrzebujesz '__hash__' tylko do tego kodu, ale dobrze jest go zaimplementować, aby twoje obiekty mogły być efektywnie używane w dyktach i zestawach. –

Powiązane problemy