You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将列表元素映射为唯一索引列表的实现方法

解决列表元素转唯一索引的问题

这事儿我日常写代码经常碰到,给你分享两个实用的解法,都能轻松把你的分类列表转换成对应的索引列表~

纯Python方案(无需额外库)

如果不想依赖第三方库,用原生Python就能搞定,还能保证元素索引和它们首次出现的顺序一致:

my_list = ['CatA', 'CatB', 'CatC', 'CatA', 'CatA', 'CatC']
# 提取唯一元素,保留首次出现的顺序(Python 3.7+字典默认有序)
unique_classes = list(dict.fromkeys(my_list))
# 创建分类到索引的映射字典
class_to_idx = {cls: idx for idx, cls in enumerate(unique_classes)}
# 生成最终索引列表
result = [class_to_idx[item] for item in my_list]

print(result)  # 输出: [0, 1, 2, 0, 0, 2]

原理很简单:dict.fromkeys(my_list)会自动去重并保留元素第一次出现的顺序,之后用enumerate给每个唯一元素分配索引,最后通过列表推导式把原列表的每个元素替换成对应的索引就行。

Numpy方案(高效处理大规模数据)

如果你已经在用numpy处理数据,那直接用np.unique的return_inverse参数就能一步到位:

import numpy as np

my_list = ['CatA', 'CatB', 'CatC', 'CatA', 'CatA', 'CatC']
# 获取唯一元素,同时得到原列表元素对应的索引
unique_classes, indices = np.unique(my_list, return_inverse=True)
# 把numpy数组转成普通列表
result = indices.tolist()

print(result)  # 输出: [0, 1, 2, 0, 0, 2]

⚠️ 注意:np.unique默认会对唯一元素进行排序,刚好你的例子里CatA、CatB、CatC排序后和首次出现顺序一致,所以结果没问题。如果你的分类元素排序后和首次出现顺序不同,想要保持原顺序的话,在numpy 1.23+版本可以加order='stable'参数:

unique_classes, indices = np.unique(my_list, return_inverse=True, order='stable')

两种方案各有优劣:纯Python方案轻量无依赖,适合小数据集;numpy方案效率更高,适合处理大规模数据。按需选择就好~

内容的提问来源于stack exchange,提问作者user2261062

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:19:29