在Python列表中查找连续重复的字符串

Pyt*_*ogy 1 python

在Python列表中查找连续重复字符串的最有效方法是什么?

例如,假设我有列表 ["a", "a", "b", "c", "b","b","b"].我想要一个类似的输出:["group of 2 a's found at index 0, group of 3 b's found at index 4'].

是否有内置功能来完成此任务?我找到了numpy.bincount,但这似乎只适用于数值.

在此先感谢您的帮助.

Ry-*_*Ry- 7

你应该把它称为一个组,这很有趣,因为最适合这个的功能是itertools.groupby:

>>> import itertools
>>> items = ["a", "a", "b", "c", "b", "b", "b"]
>>> [(k, sum(1 for _ in vs)) for k, vs in itertools.groupby(items)]
[('a', 2), ('b', 1), ('c', 1), ('b', 3)]
Run Code Online (Sandbox Code Playgroud)

(sum(1 for _ in vs)是计数,顺便说一句,因为len它不是只对可迭代的工作,len(list(…))是一种浪费.)

获得索引有点复杂; 我只是用循环来做.

import itertools

def group_with_index(l):
    i = 0

    for k, vs in itertools.groupby(l):
        c = sum(1 for _ in vs)
        yield (k, c, i)
        i += c
Run Code Online (Sandbox Code Playgroud)