Skip to main content
 首页 » 编程设计

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

2025年05月04日25jyk

在 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 ,但这似乎只适用于数值。

在此先感谢您的帮助。

请您参考如下方法:

有趣的是你应该称它为一个组,因为最适合这个的函数可能是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)] 
顺便说一句,

(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