python - 对列表中连续出现的相同重复项进行分组

标签 python list grouping recurring

例如,我们有这样一个列表:

L = ["item1", "item2", "item3", "item3", "item3", "item1", "item2", "item4", "item4", "item4"]

我想将它们打包成以下形式的元组列表:

[("item1", 1), ("item2", 1), ("item3", 3),... ("item1", 1)]

我已经开发了一种算法来做类似的事情,以获得:

{item1: 2, item2: 2, ...}

(它找到所有的出现并计算它们,即使它们不是邻居......)

但是,我希望它仅将那些具有相同 的项目分组为邻居(即一起出现在一行中),我该如何实现这一点?

并不是我不知道该怎么做,而是我倾向于编写很长的代码,在这种情况下我想要一个优雅且简单的解决方案。

最佳答案

这也是在使用 itertools.groupby (生成器版本):

from itertools import groupby
counts = ((k, sum(1 for _ in g)) for k, g in groupby(l))
>>> list(counts)
[('item1', 1),
 ('item2', 1),
 ('item3', 3),
 ('item1', 1),
 ('item2', 1),
 ('item4', 3)]

关于python - 对列表中连续出现的相同重复项进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13565248/

相关文章:

Python::传递一个列表作为参数

林克。按天分组。如何轻松做到这一点?

c# - 在 LINQ 中按月和年对多个日期属性进行分组

python - 向后填充条件

python - 在 gitpython 中获取特定文件的所有修订

python - 按值对元组排序,当值相等时使用列表

list - Scala:如何创建包含多个元素的 "eager evaluated"列表?

python - 通过动态键名对字典进行分组并聚合Python中嵌套字典的一些键

python - 数据提取和转换效率

python - 如何获取测试函数的 pytest 标记名称?