簡體   English   中英

從鍵更改的列表中獲取索引,groupby

[英]Get index from a list where the key changes, groupby

我有一個看起來像這樣的列表:

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求和,以獲得索引,但我認為這樣做可能會更干凈。

思想表示贊賞。

[i for i in range(len(myList)-1) if myList[i] != myList[i+1]]

在Python 2中,將range替換為xrange

只需使用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)
>>> x0 = myList[0]
... for i, x in enumerate(myList):
...     if x != x0:
...         print i - 1
...         x0 = x
3
6

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM