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

2024-06-01 09:46:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个整数列表,如下所示:

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

我想将其转换为整数列表(从1开始),如下所示:

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

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

请告诉我您的想法如何在python中实现


Tags: 字符串列表a1整数数值b3a5b6
1条回答
网友
1楼 · 发布于 2024-06-01 09:46:45

我相信你需要itertools.groupbyenumerate

Ex:

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]

相关问题 更多 >