Skip to main content
 首页 » 编程设计

python之在 Python 中,如何获得两个列表的交集,同时保留交集的顺序

2025年05月04日10tuyile006

我有一个列表列表(“子列表”),我想看看是否有多个子列表出现任何未指定长度的相同序列。澄清一下,必须保留项目的顺序——我不希望每个子列表的交集作为一个集合。必须至少有 2 个项目按顺序匹配。 请看下面的例子。

输入:

someList = [[0,1,3,4,3,7,2],[2,3,4,3],[0,3,4,3,7,3]]

期望的输出:(将打印到文件,但不要担心这个细节)

sublist0_sublist1 = [3,4,3] #第一个和第二个子列表的交集

sublist0_sublist2 = [3,4,3,7] #第一个和第三个子列表的交集

sublist1_sublist2 = [3,4,3] #第二个和第三个子列表的交集

请您参考如下方法:

为您整理了一下(包括您关于等长最大子列表应全部返回列表的评论):

def sublists(list1, list2): 
    subs = [] 
    for i in range(len(list1)-1): 
        for j in range(len(list2)-1): 
            if list1[i]==list2[j] and list1[i+1]==list2[j+1]: 
                m = i+2 
                n = j+2 
                while m<len(list1) and n<len(list2) and list1[m]==list2[n]: 
                    m += 1 
                    n += 1 
                subs.append(list1[i:m]) 
    return subs 
 
def max_sublists(list1, list2): 
    subls = sublists(list1, list2) 
    if len(subls)==0: 
        return [] 
    else: 
        max_len = max(len(subl) for subl in subls) 
        return [subl for subl in subls if len(subl)==max_len] 

这适用于这些情况:

In [10]: max_sublists([0,1,3,4,3,7,2],[0,3,4,3,7,3]) 
Out[10]: [[3, 4, 3, 7]] 
In [11]: max_sublists([0,1,2,3,0,1,3,5,2],[1,2,3,4,5,1,3,5,3,7,3]) 
Out[11]: [[1, 2, 3], [1, 3, 5]] 

虽然它不漂亮,也不是很快。

您只需要弄清楚如何比较原始子列表列表中的每个子列表,但这应该很容易。

[编辑:我修复了一个错误并阻止了你的错误发生。]