如何有效地将列表中的元素映射到它们的值?

时间:2018-06-30 09:22:18

标签: python list

我有一个列表list1,我想将其元素映射到相应的值。

code = ['a','b','c']
value = [1,2,3]             
list1 = ['a','a','b','c','b','b','a','c']

这是我编写的代码。

def codeToValue(code,value,list1):
    list1_out = [0 for i in range(len(list1))]
    for i in range(len(list1)):
        for j in range(len(code)):
            if list1[i] == code[j]:
                list1_out[i] = value[j]
    return list1_out

我得到了想要的输出。

print(codeToValue(code,value,list1))
[1, 1, 2, 3, 2, 2, 1, 3]

此代码适用于较小的列表,但是当我使用较大的列表运行时,由于两个循环,这会花费太多时间。 请提出一些建议,以提高时间效率。 任何建议将不胜感激。

1 个答案:

答案 0 :(得分:5)

您可以使用dict(感谢zip()构建)和list comprehension

mapping = dict(zip(code, value))
out = [mapping[v] for v in list1]

关于效率:此代码段受益于O(1)字典查找(尽管您仍然需要首先遍历该字典的值),并且众所周知列表理解比普通{{1} }循环,您应该期望此代码具有更好的性能。

如果使用起来仍然太慢,则可能应该在诸如pandas之类的大数据处理中使用专门的库。