Python将字符串列表映射为整数列表
假设我有一个列表:
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]
再次提醒,要注意大写字母和非字母字符。