将列表中的项目与其他多个嵌套列表进行比较

时间:2018-04-23 14:07:56

标签: python list compare

我有多个列表,每个列表都是嵌套的,格式如下:

listA = [['A', '17']
         ['A', '16']
         ['A', '15']]

我想比较一个列表(比如说listA)和“任意”数量的其他列表,以获得listA和所有其他列表共有的第二个元素匹配,例如:

将listA与listB和listC进行比较:

listB = [['B', '17'],
         ['B', '12'],
         ['B', '11']]

listC = [['A', '18'],
         ['A', '17'],
         ['A', '15']]

此处所有列表之间的唯一匹配是“17”,因此结果应为:

new_list_A = [['A', '17']]
new_list_B = [['B', '17']]
new_list_C = [['C', '17']]

这里最好的方法是什么,什么是最pythonic解决方案?

2 个答案:

答案 0 :(得分:2)

检查出来:

Microsoft.Win32.RegistryKey

答案 1 :(得分:0)

找到所有第二个元素的交集。然后返回第二个元素在交集中的每个列表中的所有元素。

#!/usr/bin/env python3

listA = [['A', '17'],
         ['A', '16'],
         ['A', '15']]

listB = [['B', '17'],
         ['B', '12'],
         ['B', '11']]

listC = [['C', '18'],
         ['C', '17'],
         ['C', '15']]

lists = [listA, listB, listC]


def to_set(a_list):
    return {b for _, b in a_list}


intersection = to_set(lists[0])
for a_set in (to_set(a_list) for a_list in lists[1:]):
    intersection = intersection & a_set


flattened_lists = (item
                   for a_list in lists
                   for item in a_list)
results = [item
           for item in flattened_lists
           if item[1] in intersection]