Mam listę jakJak pogrupować równoważne elementy na liście w Pythonie?
x = [2, 2, 1, 1, 1, 1, 1, 1]
Chciałbym umieścić powtarzające się numery razem jak
[[2,2],[1,1,1,1,1,1]]
Mam listę jakJak pogrupować równoważne elementy na liście w Pythonie?
x = [2, 2, 1, 1, 1, 1, 1, 1]
Chciałbym umieścić powtarzające się numery razem jak
[[2,2],[1,1,1,1,1,1]]
[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))]
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
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
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. –
Co o '[2,2,1,1,1,2,2]'? Czy powinno to być [[2,2], [1,1,1], [2,2]] "lub" [[2,2,2,2], [1,1,1]] "? –