我想有效地找到两个列表的交集,保持重复交汇,例如A = [1,1,2,3],B = [1,1,2,4]应返回[1,1,1,1,2]的Python:从<strong>两个</strong>的2所列出保持重复从两个列表
我知道一个类似的问题先前被问到(Python intersection of two lists keeping duplicates ) 但是这并不能帮助我,因为只保留一个列表中的重复项。
以下工作
def intersect(A,B):
C=[]
for a in A:
for b in B:
if a==b:
C.append(a)
return C
但它不是我在做什么效率不够高!为了加快速度,我尝试了整理列表
def intersect(A,B):
A.sort()
B.sort()
C=[]
i=0
j=0
while i<len(A) and j<len(B):
if A[i]<=B[j]:
if A[i]==B[j]:
C.append(A[i])
i+=1
else:
j=j+1
return C
但是,这只能保留列表B中的重复项。任何建议?
只是为了通过“列表的交集”这里澄清你的意思是“如果发生物品N次列表A和在列表B中M次,它应该在新列表中出现N + M次,但是如果N或M为零,那么它应该在新列表中出现零次“? (这是一个不常用的术语“十字路口”。) – BrenBarn
结果中有4个''1''',因为在''''A'''中有2个,在'''B''中有2个' '',那为什么结果没有两个'''2''s? – bj0
我意识到我的上述解释根据您的数据不正确。为什么在示例结果中只有一个2,但是四个1? – BrenBarn