假设我有一个Python列表,如下所示:
a = [70,66,63,-1,-1,68,-1,70]
通过以下代码,我可以获得非负一元素之间的索引差异列表(因为-1不会出现在列表的末尾):
res = [idx for idx, val in enumerate(a) if val != -1]
index_diff = [x - res[i - 1] for i, x in enumerate(res)][1:]
index_diff看起来是这样的:
[1, 1, 3, 2]
现在我想做一些调整,因为63和68之间有两个-1,68和70之间有一个-1,我想减去它们之间的-1,所以目标应该是这样的:
[1,1,1,1]
有人能帮忙吗?
a = [70,66,63,-1,-1,68,-1,70]
res = [idx for idx, val in enumerate(a) if val != -1]
index_diff = [x - res[i - 1] for i, x in enumerate(res)][1:]
跟踪我们已经遍历过的索引,然后进行减法运算。
sumx = 0
new_count = []
for x in index_diff:
if x == 1:
sumx +=1
new_count.append(x)
else:
new_count.append(x - len(a[sumx+1:sumx+x]))
print(new_count)
[1,1,1,1]