Skip to main content
 首页 » 编程设计

python之从键改变的列表中获取索引,groupby

2025年05月04日14java哥

我有一个如下所示的列表:

myList = [1, 1, 1, 1, 2, 2, 2, 3, 3, 3] 

我想做的是记录列表中的项目改变值的索引。所以对于我上面的列表,它将是 3、6。

我知道像这样使用 groupby:

[len(list(group)) for key, group in groupby(myList)] 

将导致:

[4, 3, 3] 

但我想要的是组开始/结束的索引,而不是组中项目的数量。我知道我可以开始对每个连续的组 count-1 求和以获得索引,但我认为这样做可能有更简洁的方法。

感谢您的想法。

请您参考如下方法:

只需使用 enumerate 来生成索引和列表。

from operator import itemgetter 
from itertools import groupby 
myList = [1, 1, 1, 1, 2, 2, 2, 3, 3, 3] 
 
[next(group) for key, group in groupby(enumerate(myList), key=itemgetter(1))] 
# [(0, 1), (4, 2), (7, 3)] 

这为每个组提供了成对的 (start_index, value)。

如果你真的只想要[3, 6],你可以使用

[tuple(group)[-1][0] for key, group in  
        groupby(enumerate(myList), key=itemgetter(1))][:-1] 

或

indexes = (next(group)[0] - 1 for key, group in 
                groupby(enumerate(myList), key=itemgetter(1))) 
 
next(indexes) 
indexes = list(indexes)