如何为项目列表创建标签列表?

时间:2018-08-17 10:45:11

标签: python algorithm list numpy

我想知道以下方法是否可以做得更好:

import numpy as np
def label_items(items):
    data = np.array(items)
    labels = np.zeros(len(items), dtype='int')
    for label, value in enumerate(set(items)):
        labels[data==value] = label
    return labels

例如:

label_items(['a', 'a', 'c', 'd', 'e', 'b', 'e', 'e', 'd', 'c'])

将返回

array([0, 0, 1, 4, 3, 2, 3, 3, 4, 1])

附录:字母仅是示例,可以是任何内容的列表。这就是为什么我将函数称为“ label_items”。标签的顺序无关紧要。

2 个答案:

答案 0 :(得分:4)

您可以使用简单的map

list(map(lambda x: ord(x) - ord('a'), a))

结果:

[0, 0, 2, 3, 4, 1, 4, 4, 3, 2]

因此,ord函数返回一个整数,表示该字符的Unicode代码点。比ord(x) - ord('a')(其中x-一些字母)返回字母顺序编号。

答案 1 :(得分:4)

如果顺序不重要,则可以使用numpy.unique

import numpy as np

def label_items(arr):
    return np.unique(arr, return_inverse=True)

vals, labels = label_items(['a', 'a', 'c', 'd', 'e', 'b', 'e', 'e', 'd', 'c'])

print(vals)

['a' 'b' 'c' 'd' 'e']

print(labels)

[0 0 2 3 4 1 4 4 3 2]