【发布时间】:2020-04-05 22:43:09
【问题描述】:
例如,如果我有一个列表 [1,2,2,3,2,2,1],我想返回带有索引 (0,1,3,4,6) 的 [1,2,3,2,1]。
我对 groupby 不熟悉,我学会了如何消除相邻的重复项,但是也可以通过 groupby() 以某种方式提取索引?谢谢你。
【问题讨论】:
标签: python list indexing itertools
例如,如果我有一个列表 [1,2,2,3,2,2,1],我想返回带有索引 (0,1,3,4,6) 的 [1,2,3,2,1]。
我对 groupby 不熟悉,我学会了如何消除相邻的重复项,但是也可以通过 groupby() 以某种方式提取索引?谢谢你。
【问题讨论】:
标签: python list indexing itertools
是的,有可能,您可以将itertools.groupby、enumerate() 和右边的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)
打印:
[1, 2, 3, 2, 1]
[0, 1, 3, 4, 6]
【讨论】:
for x in g: continue #outside for loop rv.append(v) index.append(x[0])谢谢。
index.append(next(g)[0]) 从迭代器 g (next(g) 部分)获取第一个值,然后从该值([0] 部分)获取第一个元素并将其附加到列表 @987654331 @。迭代器g 包含来自enumerate(lst) 迭代器的组。本例中的第一组是(0, 1),第二组是(1, 2), (2, 2),第三组是(3, 3),依此类推...使用for x in g: continue,您只需遍历整个组,x 将是该组的最后一个元素。