在 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
