【发布时间】:2015-01-30 18:08:03
【问题描述】:
我有一个包含重复值的列表,如下所示:
x = [1, 1, 1, 2, 2, 2, 1, 1, 1]
此列表由模式匹配正则表达式生成(此处未显示)。该列表保证具有重复值(很多很多重复 - 数百,如果不是数千),并且永远不会随机排列,因为这是正则表达式每次匹配的内容。
我想要的是跟踪条目从以前的值更改的列表索引。所以对于上面的列表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
输出:[3, 6]
问题:有没有一种更简洁的方法可以用更少的代码行来做我想做的事?
【问题讨论】:
-
很好看,您可以通过在第二个 if 语句中使用
index-1来摆脱lag,并将第二个 if 更改为!=,这样您就可以删除 else 和将该代码移至 if -
@JamesKent 这是个好主意。我更新了问题和代码。谢谢。
-
您已经拥有
item,因此您无需再次访问x[index]即可与x[index-1]进行比较