将较小列表的值放在较大列表的适当位置

时间:2019-11-18 23:27:21

标签: python indexing

我需要在较大列表的适当位置输入较小列表的值,例如

l_1 = ['a', 'c', 'e', 'd']
v_1 = [5, 6, 8, 10]

l_2 = ['a', 'ab', 'c', 'd', 'e']

我正在寻找生成一个v_2值(初始化为大小l_2的零),该值在v_1属于l_1的位置上使用l_2 。因此,对于上面的示例,我想获得

v_2 = [5, 0, 6, 10, 8]

很显然,l_1l_2的子集,即l_2将始终具有l_1的数量。

我发现第一个答案here有助于确定l_1l_2中的位置,并希望对其进行修改以适合我的情况。理想情况下,我想输入3个输入

a = l_1
b = l_2 
val = v_1

def ismember(a, b, val):
    bind = {}
    for i, elt in enumerate(b):
        if elt not in bind:
            bind[elt] = i
    return [bind.get(itm, None) for itm in a] 

我需要修改return语句,以便将v_1的适当条目输入到已填充的v_2中,可以在函数中将其初始化为np.zeros((len(b),1))

1 个答案:

答案 0 :(得分:2)

使用dict中的值作为键并使用l_1中的值来构造v_1来进行查找要容易得多。例如:

>>> l_1 = ['a', 'c', 'e', 'd']
>>> v_1 = [5, 6, 8, 10]
>>> l_2 = ['a', 'ab', 'c', 'd', 'e']

然后

>>> d = dict(zip(l_1, v_1))
>>> [d.get(i, 0) for i in l_2]
[5, 0, 6, 10, 8]