【问题标题】:Counting consecutive duplicates of strings from a list计算列表中字符串的连续重复
【发布时间】:2018-11-22 13:44:11
【问题描述】:

我有一个 Python 字符串列表,

输入:

li = ['aaa','bbb','aaa','abb','abb','bbb','bbb','bbb','aaa','aaa']

如何生成另一个列表来计算列表中任何字符串的连续重复次数?对于上面的列表,返回列表类似于:

预期输出:

li_count = [['aaa',1],['bbb',1]['abb',2],['bbb',3],['aaa',2]]

【问题讨论】:

  • 你没有忘记第二个,不是重复的'aaa'吗? li_count = [['aaa',1],['bbb',1],['aaa',1],['abb',2],['bbb',3],['aaa,2]] 应该是正确的。请展示您目前的尝试情况以及为什么它们不起作用。

标签: python arrays string list duplicates


【解决方案1】:

使用itertools.groupby:

from itertools import groupby
li = ['aaa','bbb','aaa','abb','abb','bbb','bbb','bbb','aaa','aaa']

a = [[i, sum(1 for i in group)] for i, group in groupby(li)]
print(a)
[['aaa', 1], ['bbb', 1], ['aaa', 1], ['abb', 2], ['bbb', 3], ['aaa', 2]]

感谢@user3483203 的改进:

a = [[i, len([*group])] for i, group in groupby(li)]

【讨论】:

  • 这里使用[[i, len([*group])] for i, group in groupby(li)]会快很多。大约是 sum 的两倍速度
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-09
  • 1970-01-01
  • 2019-08-01
  • 1970-01-01
  • 2018-11-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多