计算列表中连续重复的字符串

swo*_*nep -1 python arrays string list duplicates

我有一个字符串的Python列表,

输入:

li = ['aaa','bbb','aaa','abb','abb','bbb','bbb','bbb','aaa','aaa']
Run Code Online (Sandbox Code Playgroud)

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

预期产出:

li_count = [['aaa',1],['bbb',1]['abb',2],['bbb',3],['aaa',2]]
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 7

用途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]]
Run Code Online (Sandbox Code Playgroud)

谢谢@ user3483203的改进:

a = [[i, len([*group])] for i, group in groupby(li)]
Run Code Online (Sandbox Code Playgroud)

  • 这里使用`[[i,len([*group])]为i,groupby(li)]中的组要快得多.大约是"sum"的两倍 (2认同)