bla*_*nge 5 python performance numpy
我想根据值将列表映射到数字.
例如:
['aa', 'b', 'b', 'c', 'aa', 'b', 'a'] -> [0, 1, 1, 2, 0, 1, 3]
Run Code Online (Sandbox Code Playgroud)
我试图通过使用numpy和映射字典来实现这一点.
def number(lst):
x = np.array(lst)
unique_names = list(np.unique(x))
mapping = dict(zip(unique_names, range(len(unique_names)))) # Translating dict
map_func = np.vectorize(lambda name: d[name])
return map_func(x)
Run Code Online (Sandbox Code Playgroud)
是否有更优雅/更快的方式来做到这一点?
更新:奖金问题 - 按照维护的顺序执行此操作.
Use sets to remove duplicates:
myList = ['a', 'b', 'b', 'c', 'a', 'b']
mySet = set(myList)
Run Code Online (Sandbox Code Playgroud)
Then build your dictionary using comprehension:
mappingDict = {letter:number for number,letter in enumerate(mySet)}
Run Code Online (Sandbox Code Playgroud)