如何将无序列表映射到从 1 开始的有序列表?

How to map an unordered gapped list to an orderd list beginnig from 1?

我有一个很大的无序数字列表,它们不是从一个开始的,并且它们之间有任意间隔。 python 中是否有任何命令或方式(可逆)生成另一个有序的数字列表,从一个数字开始没有间隙?

示例:

 from this:
[24608  25901   25901   27352   27352   25063   25065   24330   24330   23111   23111   23111   25253   25252   25901   27352   23111]
 to this
[1  2   2   3   3   4   5   6   6   7   8   8   8   9   2   3   8]

您可以使用 pandas.factorize:

a = np.array([24608, 25901, 25901, 27352, 27352, 25063, 25065, 24330, 24330,
              23111, 23111, 23111, 25253, 25252, 25901, 27352, 23111])

import pandas as pd
b = pd.factorize(a)[0]+1

输出:

array([1, 2, 2, 3, 3, 4, 5, 6, 6, 7, 7, 7, 8, 9, 2, 3, 7])