【问题标题】:Placing values of a smaller list at appropriate places in a larger list将较小列表的值放在较大列表中的适当位置
【发布时间】:2020-03-14 09:43:26
【问题描述】:

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

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

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

我希望在l_1 属于l_2 的位置生成一个v_2 值(初始化为大小为零的l_2),它采用v_1。所以,对于上面的例子,我想得到

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))

【问题讨论】:

    标签: python indexing


    【解决方案1】:

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

    >>> 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]
    

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 2012-07-12
      • 1970-01-01
      • 1970-01-01
      • 2020-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多