代码之家  ›  专栏  ›  技术社区  ›  Abhishek Kulkarni

将列表中的元素映射到另一个列表中的索引

  •  3
  • Abhishek Kulkarni  · 技术社区  · 6 年前

    我正在比较Python中的两个列表。

    list1 是的超集 list2 .

    对于 列表1 列表2 (如有)。

    这里有两个例子。

    list1 = ['a','b','c','d']
    list2 = ['a','b']
    

    [0, 1] .

    list1 = ['a','b','c','d']
    list2 = ['b','a']
    

    解决方案应该产生 [1, 0] .

    我尝试了以下代码,但它只适用于第一个示例。

    list1 = ['a','b','c','d']
    list2 = ['a','b']
    
    pairwise = zip(list1,list2)
    matched_index = [idx for idx, pair in enumerate(pairwise) if pair[0] == pair[1]]
    

    这很管用。但是,对于第二组样本数据,我得到了错误的输出 [] 而不是预期的输出 .

    list1 = ['a','b','c','d']
    list2 = ['b','a']
    
    pairwise = zip (list1,list2)
    matched_index = [idx for idx, pair in enumerate(pairwise) if pair[0] == pair[1]]
    print(matched_index) # prints []
    

    3 回复  |  直到 6 年前
        1
  •  3
  •   timgeb    6 年前

    我建议用字典把 list2 他们的指数假设 有独特的元素。

    >>> list1 = ['a','b','c','d']                                                                                            
    >>> list2 = ['b','a']
    >>> idx = {x:i for i,x in enumerate(list2)}                                                                            
    >>> idx                                                                                                                
    {'a': 1, 'b': 0}
    

    现在你可以发布

    >>> [idx[x] for x in list1 if x in idx]                                                                                
    [1, 0]
    
        2
  •  2
  •   jpp    6 年前

    list2 是的子集 list1 ,可以构造字典映射,然后使用 dict.__getitem__ 要提取索引:

    list1 = ['a','b','c','d']
    list2 = ['a','b']
    list3 = ['b','a']
    
    d = {v: k for k, v in enumerate(list1)}
    
    res1 = list(map(d.__getitem__, list2))  # [0, 1]
    res2 = list(map(d.__getitem__, list3))  # [1, 0]
    
        3
  •  0
  •   shantanoo    5 年前

    假设每个列表中都有唯一的元素 len(list1) >= len(list2)

    >>> list1 = ['a','b','c','d']                                                                                            
    >>> list2 = ['d','a', 'f']
    >>> print([list2.index(x) for x in list1 if x in list2])
    
    推荐文章