将列表列表与另一个列表进行比较,然后返回通用列表

时间:2018-08-21 06:16:30

标签: python python-3.x list

假设我有以下列表列表:

list1 = [[A,B],[C,D],[E, F]]
list2 = [A, B, F]

我想要一个函数返回关于第一个列表的公共列表。该示例的预期结果将是:

result = [[A,B],[],[F]]

我已经尝试遍历list1的每个元素,并通过与list2比较,创建一个附加每个元素的新数组。我知道如何遍历列表列表,但是我找不到为“结果”创建列表列表的方法。

列表不是很大,大约5个元素。可以重复这些项目,但是整个列表中列表内的顺序并不重要。

5 个答案:

答案 0 :(得分:6)

通过设置算法,极其简单,快速:

set2 = set(list2)
[list(set(e) & set2) for e in list1]

如果列表中可以包含非唯一项,那么...让我们使用计数器!

from collections import Counter
counter2 = Counter(list2)
[list((Counter(e) & counter2).elements()) for e in list1]

答案 1 :(得分:5)

这是一种方法。使用list comprehension

例如:

list1 = [["A","B"],["C","D"],["E", "F"]]
list2 = ["A", "B", "F"]

result = [[j for j in i if j in list2] for i in list1]
print(result)

输出:

[['A', 'B'], [], ['F']]

答案 2 :(得分:4)

使用setintersection

In [18]: [list(set(item).intersection(list2)) for item in list1]
Out[18]: [['A', 'B'], [], ['F']]

遍历列表列表,找到与基本列表的交集。

或者,使用list comprehension

In [16]: [[i for i in item if i in list2]for item in list1]
Out[16]: [['A', 'B'], [], ['F']]

答案 3 :(得分:0)

使用基本的python,

list1=[[1, 1, 1, 2, 2]]
list2=[1, 1, 2, 2, 2]

result = []
for sublist in list1:
    filtered = []
    for item in sublist:
        if item in list2:
            filtered.append(item)
    result.append(filtered)

print(result)

给予

[[1, 1, 1, 2, 2]]

[Program finished]

答案 4 :(得分:-2)

listA = [['A','B'],['C','D'],['E', 'F']]
listB = ['A', 'B', 'F']
listOut = []
for item in listA:
    temp = []
    for inner in item:
        for b in listB:
            if inner == b:
                temp.append(b)
    listOut.append(temp)


print(listOut)

这就是您的要求。