如何将字符串值映射为从一到字符串数的整数
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.groupby
和 enumerate
。
例如:
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]
我有一个整数列表如下:
['#a1', '#a1', '#a5', '#a5', '#b3', '#b3', '#b3', '#b6', '#b6']
我想把它转换成一个整数列表(从1开始)如下:
[1, 1, 2, 2, 3, 3, 3, 4, 4]
字符串的值并不重要。我想将相似的字符串转换为一个整数值(从一个开始)。
请让我知道如何在 python 中实施。
我相信你需要 itertools.groupby
和 enumerate
。
例如:
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]