Python不使用numpy实现字符串列表转换为分类整数的方法
字符串列表转分类整数的无NumPy实现方案
你可以通过原生Python的字典映射实现相同效果,性能和兼容性都更好,不需要导入任何第三方库:
实现代码
ipt = ['a', 'a', 'c', 'a', 'a', 'a', 'd', 'c', 'd', 'd', 'd', 'd', 'c', 'd', 'd', 'd', 'd', 'c', 'd', 'd', 'd', 'd', 'c', 'b', 'b', 'b', 'd', 'b', 'b', 'b'] # 第一步:获取排序后的唯一值列表,和NumPy unique的默认排序逻辑一致 unique_values = sorted(set(ipt)) # 第二步:构建元素到整数的映射字典 value_map = {val: idx for idx, val in enumerate(unique_values)} # 第三步:遍历原列表完成转换 result = [value_map[item] for item in ipt]
执行后result的输出完全符合你给出的预期结果:[0, 0, 2, 0, 0, 0, 3, 2, 3, 3, 3, 3, 2, 3, 3, 3, 3, 2, 3, 3, 3, 3, 2, 1, 1, 1, 3, 1, 1, 1]
补充简易方案(仅适合小数据量)
如果原列表数据量很小,也可以直接用列表的index方法简化写法,不需要单独构建映射字典:
unique_values = sorted(set(ipt)) result = [unique_values.index(item) for item in ipt]
该方案每次匹配都需要遍历唯一值列表,数据量越大性能损耗越高,仅推荐小数据场景使用。
内容的提问来源于stack exchange,提问作者rpb
相关产品推荐
相关产品推荐

