假设我有以下列表列表:
list1 = [[A,B],[C,D],[E, F]]
list2 = [A, B, F]
我想要一个函数返回关于第一个列表的公共列表。该示例的预期结果将是:
result = [[A,B],[],[F]]
我已经尝试遍历list1的每个元素,并通过与list2比较,创建一个附加每个元素的新数组。我知道如何遍历列表列表,但是我找不到为“结果”创建列表列表的方法。
列表不是很大,大约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)
使用set
和intersection
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)
这就是您的要求。