如何在Python列表中将等效项分组?

8

I have a list like

x = [2, 2, 1, 1, 1, 1, 1, 1]

我想把重复的数字放在一起,就像这样:

[[2,2],[1,1,1,1,1,1]] 

1
[2,2,1,1,1,2,2]怎么处理?应该是[[2,2],[1,1,1],[2,2]]还是[[2,2,2,2],[1,1,1]] - Michał Bentkowski
1个回答

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

这正是 itertools.groupby 的用途。

如果您想要分组非连续数字,就像 @Michal 的评论中所述,

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

不错的技巧。这个解决方案适用于什么?我的意思是,整数、浮点数、字符串之类的可迭代对象应该没问题。那么如果是你自己定义的类对象的可迭代对象呢?如果实现了__eq__或__hash__,是否可以使用这个解决方案? - Bogdan
1
只要它们相等,它就能工作;与实现等效的代码在我的答案链接中。因此,只需实现__eq__(还有__hash__,因为相等的对象需要散列相同),它就能工作。 - agf
3
你不需要为了使这段代码运行而实现__hash__,但是最好还是要实现它,这样你的对象可以在字典和集合中被有效使用。 - Ned Batchelder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接