【问题标题】:How can I group equivalent items together in a Python list?如何在 Python 列表中将等效项分组在一起?
【发布时间】:2011-08-30 12:16:20
【问题描述】:

我有一个类似的列表

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

我想把重复的数字放在一起

[[2,2],[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]]

标签: python list


【解决方案1】:
[list(g) for k, g in itertools.groupby(iterable)]

这正是itertools.groupby 的用途。

如果您想对不连续的数字进行分组,例如@Michal 的评论,

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

【讨论】:

  • 不错的把戏。这个解决方案有什么用?我的意思是整数,浮点数,字符串的迭代,我想没关系。你自己的类对象的迭代怎么样?如果实现了 eqhash 这些会起作用吗?
  • 只要它们比较相等,它就会起作用;等效于实现的代码在我的答案中的链接中。所以,只需实现__eq__(还有__hash__,因为相等的对象需要散列相同),它就会起作用。
  • 你不需要__hash__ 只是为了让这段代码工作,但最好实现它,以便你的对象可以在字典和集合中有效地使用。
猜你喜欢
  • 2017-10-21
  • 2022-01-06
  • 1970-01-01
  • 2013-03-24
  • 2020-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多