Python将字符串列表映射为整数列表

7 投票
10 回答
28832 浏览
提问于 2025-04-17 12:39

假设我有一个列表:

l = ['michael','michael','alice','carter']

我想把它转换成下面这个样子:

k = [1,1,2,3]

在这个转换中,michael对应1,alice对应2,等等。请问在Python里有没有简单的方法可以做到这一点?

10 个回答

5

为了回答这个修改过的问题,也就是把字符串列表映射到唯一的整数,首先需要找出这些字符串中有哪些是独一无二的。然后再把这些独特的字符串和整数一一对应起来。举个例子,

s = ['michael','michael','alice','carter']

那么独特的字符串就是 {'michael','alice','carter'}。接下来,把这些字符串通过一一对应的方式转换成整数,比如 {'michael','alice','carter'} =[1,2,3],可以用字典 {'michael':1,'alice':2,'carter':3} 来表示。在第三步中,遍历原来的字符串列表;在字典中查找对应的整数,把字符串替换成那个整数。

s=['michael','michael','alice','carter']

mydict={}
i = 0
for item in s:
    if(i>0 and item in mydict):
        continue
    else:    
       i = i+1
       mydict[item] = i

k=[]
for item in s:
    k.append(mydict[item])

输出:

k=[1, 1, 2, 3]
7

用Pandas怎么样?

import pandas as pd
l = ['michael','michael','alice','carter']
pd.Series(l).astype('category').cat.codes.values
12

看看这个ord,它可以给你一个字符对应的unicode编号:

>>> letters = ['a','b','c','d','e','f','g']
>>> [ord(x) for x in letters]
[97, 98, 99, 100, 101, 102, 103]

所以你可以用 ord(x)-96 来把字母 a-z 转换成数字 1-26(注意大写字母等情况)。

l = ['a','b','a','c']
k = [ord(x)-96 for x in l] # [1,2,1,3]

再次提醒,要注意大写字母和非字母字符。

撰写回答