Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将一个列表与另一个列表进行比较,并返回公共列表_Python_Python 3.x_List - Fatal编程技术网

Python 将一个列表与另一个列表进行比较,并返回公共列表

Python 将一个列表与另一个列表进行比较,并返回公共列表,python,python-3.x,list,Python,Python 3.x,List,假设我有以下列表: list1 = [[A,B],[C,D],[E, F]] list2 = [A, B, F] 我需要一个函数来返回与第一个列表相关的公共列表。本例的预期结果是: result = [[A,B],[],[F]] 我已经尝试迭代list1的每个元素,并通过与list2比较,创建一个附加每个元素的新数组。我知道如何迭代列表,但我没有找到为“结果”创建列表的方法 列表不大,大约有5个元素。项目可能会重复,但列表中的顺序,整个列表中的顺序并不重要。这是一种方法。使用列表理解 Ex:

假设我有以下列表:

list1 = [[A,B],[C,D],[E, F]]
list2 = [A, B, F]
我需要一个函数来返回与第一个列表相关的公共列表。本例的预期结果是:

result = [[A,B],[],[F]]
我已经尝试迭代list1的每个元素,并通过与list2比较,创建一个附加每个元素的新数组。我知道如何迭代列表,但我没有找到为“结果”创建列表的方法


列表不大,大约有5个元素。项目可能会重复,但列表中的顺序,整个列表中的顺序并不重要。

这是一种方法。使用
列表理解

Ex:

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']]
输出:

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']]

使用
设置
交叉口

In [18]: [list(set(item).intersection(list2)) for item in list1]
Out[18]: [['A', 'B'], [], ['F']]
遍历列表列表并找到与基本列表的交集

或者,使用
列表理解

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

使用set算法,非常简单和快速:

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]
这就是您所要求的。

使用基本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)
给予



在实际数据中,这些列表有多大,尤其是
list2
?如果
list2
较大,则从中进行设置会更快。此外,
list2
list1
的子列表是否可以包含重复项?您是否需要在新的子列表中保留原始顺序?即使不起作用,也要显示您的code@PM2Ring它们不是很大,大约有5个元素。是的,这些项目有可能被重复,但是列表中的顺序,整个列表中的顺序,并不重要。谢谢大家!@ealvaradop感谢您提供的信息!但是你应该把它放在问题本身,不要把它埋在这里的评论中。但是,如果
list2
多次包含某个值,它就不起作用了。@Thomas你的情况应该是什么?@Thomas:这很公平。同样,OP也没有数据来表示这种情况。@Thomas,是的。正如@BearBrown所说,问题在于,在该场景中,输出没有完全定义,需要OP的进一步澄清。例如,
list1=[[1,1,1,2,2]]
list2=[1,1,2,2]
的输出应该是什么?大概是
[[1,1,2,2]]
-但目前没有一种解决方案能产生这种效果-因此,仅仅抱怨我的:D是不公平的,但很好,接受了挑战@PM2Ring:那么我的第二个解决方案可能就是正确的解决方案(不保留顺序,是重复处理)。我从来没有在python中了解过这个特性,我将不得不研究它。谢谢@Rakesh@vividpk21如果您从未学习过Python中的列表理解,那么您的老师就非常糟糕。该解决方案在@Rakesh中运行良好。我知道列表理解,但我没有想到这个想法。谢谢大家!@托马斯,你可以看到时间安排,我们几乎同时发布。因此,更新了另一个解决方案。请指出您的解决方案建议与其他解决方案的相似之处。谢谢删除了目前为止的否决票。@Thomas回答者没有义务将他们的答案与其他答案进行比较。但是如果他们给代码添加一些解释就好了…
[[1,1,1,1,1,1,2,2,2]][Program finished]
,这对于
list1=[[1,1,1,2,2]]list2=[1,1,2,2,2]