【问题标题】:How to fetching a list from a list of list if any element matches in the internal list如果内部列表中的任何元素匹配,如何从列表列表中获取列表
【发布时间】:2019-07-07 17:55:57
【问题描述】:

'list1' 的第二个列元素与 'list2 的循环中的元素匹配时,我想从 'list1' 获取内部列表'

我有一个这样的列表:

list1=
    [
        [1546,'token1',12,442],
        [23,'token2',4,542],
        [6,'token3',34,462],
        [336,'token4',45,642],
        [146,'token5',43,62],
    ]

还有另一个列表:

list2=['token1','token2','token3','token4','token5']



 for element in list2:

这里我要 if element == list1 第二列元素(即'token1'==list1的第二列元素'token1')
然后我得到清单 [ID,element,value1,value2](即[1546,'token1',12,442])来自list1

【问题讨论】:

标签: python list dictionary


【解决方案1】:

你可以试试:

dict_from_list_1 = {e[1]: e for e in list1}
for element in list2:
    if element in dict_from_list_1:
        print(dict_from_list_1[element])

【讨论】:

  • 第二个解决方案无法正确使用此列表,而第一个解决方案可以。 list2=['token4','token2','token3']
  • 如果您想节省一些内存,在第一个示例中,您可以将列表在 list1 中的位置作为值保存在 dict 中
  • 你已经给出了三个答案。第一个很好。第二个时间复杂度更高。第三个不正确。 @rusu_ro1
【解决方案2】:

这是执行此操作的两种方法,可以产生您想要的结果。让我展示一下漫长的道路:

for i in list1:
    if i[1] in list2:
        print (i)

那么这里我们就可以用一个Generator来实现上面的一行代码了。

[element for element in list1 if element[1] in list2]

希望这会有所帮助。

【讨论】:

    【解决方案3】:

    列表推导是一种非常简单而强大的方法:

    lista = [[i for i in list1 if token in i] for token in list2]
    
    print([each[0] for each in lista if len(each)])
    

    输出:

    [[1546, 'token1', 12, 442], [23, 'token2', 4, 542], [6, 'token3', 34,462], [336, 'token4', 45, 642], [146, 'token5', 43, 62]]
    

    【讨论】:

    • 我同意,但你不应该过度使用它来创建难以阅读的代码;)
    • 我会使用迭代器lista = (...)。但是我的解决方案有更好的时间复杂度:)
    • 感谢@HelenaMartins,正如我之前所说,我不想在这个问题中使用两个 for 循环。
    【解决方案4】:

    您可以使用 dictcomp 创建用于查找的 dict,并使用 listcomp 将数据提取到列表中:

    d = {i[1]: i for i in list1}
    l = [d[i] for i in list2]
    

    【讨论】:

    • 这个很好。
    猜你喜欢
    • 2014-12-16
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 2023-02-04
    • 2012-04-04
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多