【问题标题】:Retrieve lists from a list of lists based on the given first elements根据给定的第一个元素从列表列表中检索列表
【发布时间】:2015-06-24 15:49:58
【问题描述】:
list1 = [1, 3, 5, 7]
list2 = [[1, "name1", "sys1"], [2, "name2", "sys2"], [3, "name3", "sys3"], [4, "name4", "sys4"]]

我有以下 2 个列表,我希望能够从 list2 中检索与 list1 匹配的每个项目。

所以,结果会是这样的:

result = [[1, "name1", "sys1"], [3, "name3", "sys3"]]

另外还有一种简单的方法可以找出不匹配的项目,

notmatch = [5, 7]

我已阅读此Find intersection of two lists?,但它没有产生我需要的结果。

【问题讨论】:

标签: python


【解决方案1】:
>>> ids = set(list1)
>>> result = [x for x in list2 if x[0] in ids]
>>> result
[[1, 'name1', 'sys1'], [3, 'name3', 'sys3']]

>>> ids - set(x[0] for x in result)
{5, 7}

【讨论】:

    【解决方案2】:

    使用set 查找索引:查找时间更快:

    >>> indices = set(list1)
    

    匹配项:

    >>> matching = [x for x in list2 if x[0] in indices]
    >>> matching
    [[1, 'name1', 'sys1'], [3, 'name3', 'sys3']]
    

    不匹配的项目:

    >>> nonmatching = [x for x in list2 if x[0] not in indices]
    >>> nonmatching
    [[2, 'name2', 'sys2'], [4, 'name4', 'sys4']]
    

    【讨论】:

      【解决方案3】:
      In [3]: result=[i for i in list2 if i[0] in list1]
      Out[4]: [[1, 'name1', 'sys1'], [3, 'name3', 'sys3']]
      
      In [5]: nums=[elem[0] for elem in result]
      In [6]: [i for i in list1 if i not in nums]
      Out[6]: [5, 7]
      

      【讨论】:

        【解决方案4】:
        list1 = [1, 3, 5, 7]
        list2 = [[1, "name1", "sys1"], [2, "name2", "sys2"], [3, "name3", "sys3"], [4, "name4", "sys4"]]
        result = []
        
        for elem in list1:
            for x in range(len(list2)):
                if elem == list2[x][0]:
                    result.append(list2[x])
        print(result)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-07-10
          • 2018-09-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-26
          相关资源
          最近更新 更多