我需要在较大列表的适当位置输入较小列表的值,例如
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_1
是l_2
的子集,即l_2
将始终具有l_1
的数量。
我发现第一个答案here有助于确定l_1
在l_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))
答案 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]