按照列表中出现的唯一元素来标记列表

问题描述 投票:0回答:1

给定一个字符串列表,例如:

foo = ['A', 'A', 'B', 'A', 'B', 'C', 'C', 'A', 'B', 'C', 'A']

我们如何标记它们以便输出为:

输出 = ['A1', 'A2', 'B1', 'A3', 'B2', 'C1', 'C2', 'A4', 'B2', 'C3', 'A5'] (保持原列表顺序)

在下面的例子中,只有 3 个唯一的变量需要查看,所以我首先想到的是查看唯一的元素:

将 numpy 导入为 np

np.unique(foo)

输出 = ['A', 'B', 'C']

但是当我试图找到合适的循环来达到所需的输出时,我就会陷入困境。

python numpy sorting labeling
1个回答
0
投票

使用纯Python,利用字典来计算值:

foo = ['A', 'A', 'B', 'A', 'B', 'C', 'C', 'A', 'B', 'C', 'A']

d = {}
out = []
for val in foo:
    d[val] = d.get(val, 0)+1
    out.append(f'{val}{d[val]}')

如果你可以使用:

import pandas as pd

s = pd.Series(foo)
out = s.add(s.groupby(s).cumcount().add(1).astype(str)).tolist()

输出:

['A1', 'A2', 'B1', 'A3', 'B2', 'C1', 'C2', 'A4', 'B3', 'C3', 'A5']

© www.soinside.com 2019 - 2024. All rights reserved.