有没有办法使用 itertools groupby 删除列表中相邻的重复项,但保留原始索引?

kuk*_*uku 2 python indexing list python-itertools

例如,如果我有一个 list [1,2,2,3,2,2,1],我想返回[1,2,3,2,1]索引 (0,1,3,4,6)。

我不熟悉 groupby,我学会了如何消除相邻的重复项,但是也可以以某种方式使用 groupby() 提取索引?谢谢你。

And*_*ely 7

是的,这是可能的,您可以将itertools.groupby, withenumerate()和 right结合使用key=

例如:

lst = [1,2,2,3,2,2,1]

from itertools import groupby

rv, index = [], []
for v, g in groupby(enumerate(lst), key=lambda k: k[1]):
    rv.append(v)
    index.append(next(g)[0])

print(rv)
print(index)
Run Code Online (Sandbox Code Playgroud)

印刷:

[1, 2, 3, 2, 1]
[0, 1, 3, 4, 6]
Run Code Online (Sandbox Code Playgroud)