跟踪Python中重复列表中的值更改

prr*_*rao 5 python list repeat

我有一个重复值的列表,如下所示:

x = [1, 1, 1, 2, 2, 2, 1, 1, 1]
Run Code Online (Sandbox Code Playgroud)

此列表是从匹配正则表达式的模式生成的(此处未显示).该列表保证具有重复值(许多,许多重复 - 数百,如果不是数千),并且从不随机排列,因为这是正则表达式每次匹配的内容.

我想要的是跟踪条目从前一个值更改的列表索引.因此,对于上面的列表中x,我想获得一个变化跟踪列表[3, 6]说明x[3],并x[6]从列表中他们以前的条目不同.

我设法做到了这一点,但我想知道是否有更清洁的方式.这是我的代码:

x = [1, 1, 1, 2, 2, 2, 1, 1, 1]

flag = []
for index, item in enumerate(x):
    if index != 0:
        if x[index] != x[index-1]:
            flag.append(index)

print flag
Run Code Online (Sandbox Code Playgroud)

输出:[3, 6]

问题:在更少的代码行中,是否有更简洁的方法来做我想要的事情?

Bha*_*Rao 6

它可以使用列表推导和range函数来完成

>>> x = [1, 1, 1, 2, 2, 2, 3, 3, 3]
>>> [i for i in range(1,len(x)) if x[i]!=x[i-1] ]
[3, 6]
>>> x = [1, 1, 1, 2, 2, 2, 1, 1, 1]
>>> [i for i in range(1,len(x)) if x[i]!=x[i-1] ]
[3, 6]
Run Code Online (Sandbox Code Playgroud)