通过在python中匹配主列表中的项来生成索引列表

2024-06-03 10:08:23 发布

您现在位置:Python中文网/ 问答频道 /正文

新手问题:假设我有一些类别和数据:

categories = ['cow', 'pig', 'rat', 'hen', 'dog', 'cat']
data = ['hen', 'cat', 'pig', 'hen', 'dog', 'cow', 'cat', 'dog', 'rat', 'hen' ]

如何为数据生成数字标签列表,其中标签是类别主列表中数据项的索引?也就是说,生成列表[3, 5, 1, 3, 4, 0, 5, 4, 2, 3 ]。。。这当然不是因为:

label = [index for item in data if categories[index] == item]    # useless!!

我知道可以使用scikit学习LabelEncoder生成此列表。如何在纯python中实现这一点


Tags: 数据列表dataindex标签item类别cat
3条回答

您可以尝试listindex函数:-

categories = ['cow', 'pig', 'rat', 'hen', 'dog', 'cat']
data = ['hen', 'cat', 'pig', 'hen', 'dog', 'cow', 'cat', 'dog', 'rat', 'hen' ]

res = []

for i in data:
    if i in categories:
        res.append(categories.index(i))
    else:
        res.append(-1)

print(res)

输出为:-

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

试试这个。它将处理类别列表中不存在的项目。 它将为这些元素提供-1

categories = ['cow', 'pig', 'rat', 'hen', 'dog', 'cat']
data = ['hen', 'cat', 'pig', 'hen', 'dog', 'cow', 'cat', 'dog', 'rat', 'hen' ]
print([categories.index(i) if i in categories else -1 for i in data])

也许这是过早的优化,但我可能会首先将类别名称映射到索引,以避免在所有类别中执行双重嵌套循环:

categories = ['dog', 'fish', 'tree', 'toad']
data = ['toad', 'tree', 'dog', 'fish', 'toad', 'toad']

m = { name : idx for idx,name in enumerate(categories) }

print([ m[n] for n in data])

相关问题 更多 >