两个列表的交集,在第一个列表中保留重复项
问题描述
我有两个平面列表,其中一个包含重复值.例如,
I have two flat lists where one of them contains duplicate values. For example,
array1 = [1,4,4,7,10,10,10,15,16,17,18,20]
array2 = [4,6,7,8,9,10]
我需要在array1 中找到也在array2 中的值,将重复项保留在array1 中.期望的结果将是
I need to find values in array1 that are also in array2, KEEPING THE DUPLICATES in array1. Desired outcome will be
result = [4,4,7,10,10,10]
我想避免循环,因为实际数组将包含数百万个值.我尝试了各种集合和相交组合,但就是无法保留重复项..
I want to avoid loops as actual arrays will contain over millions of values. I have tried various set and intersect combinations, but just couldn't keep the duplicates..
解决方案
你不想使用循环是什么意思?您将不得不以一种或另一种方式对其进行迭代.只需单独接收每个项目并检查它是否在 array2
中:
What do you mean you don't want to use loops? You're going to have to iterate over it one way or another. Just take in each item individually and check if it's in array2
as you go:
items = set(array2)
found = [i for i in array1 if i in items]
<小时>
此外,根据您将如何使用结果,考虑使用生成器:
Furthermore, depending on how you are going to use the result, consider having a generator:
found = (i for i in array1 if i in array2)
这样您就不必一次将整个内容全部记住.
so that you won't have to have the whole thing in memory all at once.
相关文章