关于python:列表中重复元素的序列索引

Sequenced indexing of duplicate elements in a list

我有一个列表是:

a = [100, 200, 200, 400, 500, 600, 600, 700, 900, 1000, 400, 200, 500]

如果我尝试使用以下方法查找'a'中的值的索引:

1
2
3
4
5
xlist=[]
for value in a:
    x = np.array(a.index(value), value)
    xlist.append(x)
print(xlist)

它给了我

xlist = [0, 1, 1, 3, 4, 5, 5, 7, 8, 9, 3, 1, 4]

相反,我想要一个列表,它为每个重复值提供了唯一的索引。 像这样的东西:

xlist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

如果索引已经被使用则会跳转索引并继续索引下一个重复值并进一步执行。
任何帮助,将不胜感激。 提前致谢。


像这样的东西可以工作:

1
2
3
4
5
6
7
8
In [1030]: a = [100, 200, 200, 400, 500, 600, 600, 700, 900, 1000, 400, 200, 500]
In [1036]: idx = []

In [1037]: for index, val in enumerate(a):
      ...:     idx.append(index)

In [1038]: idx
Out[1038]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

或者使用list comprehensions表示1行命令:

1
In [1042]: idx = [index for index,val in enumerate(a)]

适用于python2和python3。


如果我理解正确,你就是在思考这个问题。 是否重复,您似乎只想要一个从0到最后一个a索引的列表。

如果是这种情况,只需发出

1
2
>>> list(range(len(a))) # Python 3
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

要么

1
2
>>> range(len(a)) # Python 2
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]