如何将字符串值映射为从一到字符串数的整数

How to map string values into integer starting from one to number of strings

我有一个整数列表如下:

['#a1', '#a1', '#a5', '#a5', '#b3', '#b3', '#b3', '#b6', '#b6']

我想把它转换成一个整数列表(从1开始)如下:

[1, 1, 2, 2, 3, 3, 3, 4, 4]

字符串的值并不重要。我想将相似的字符串转换为一个整数值(从一个开始)。

请让我知道如何在 python 中实施。

我相信你需要 itertools.groupbyenumerate

例如:

from itertools import groupby

data = ['#a1', '#a1', '#a5', '#a5', '#b3', '#b3', '#b3', '#b6', '#b6']

result = [idx for idx, (k, v) in enumerate(groupby(data), 1) for i in v]
print(result)

输出:

[1, 1, 2, 2, 3, 3, 3, 4, 4]

尽管您可以为此使用 itertools,但这个要求非常简单,您可以轻松实现它而无需加载任何额外的模块。

这可能是学习生成器函数的一个很好的练习,因此它会在迭代时惰性求值:

def fun(arr):
    i = 0
    last = {}
    for a in arr:
        if a != last: i+= 1
        last = a
        yield i

并像这样使用它:

result = [*fun(x)]
# [1, 1, 2, 2, 3, 3, 3, 4, 4]