代码之家  ›  专栏  ›  技术社区  ›  user3541631

比较两个列表,并创建具有交叉和差异的其他两个列表

  •  0
  • user3541631  · 技术社区  · 6 年前

    在B列表中,我可以有A列表中的多个元素。

    例如:

    A = [1,3,5,7, 9, 12, 14]
    B = [1,2,3,3,7,9,7,3,14,14,1,3,2,5,5]
    

    我想创造:

    1. 创建位于a中且在B中没有对应ID的ID列表(唯一)
    2. 也很高兴得到:B中的数字,在a中没有对应关系

    我的方法是两个循环:

    l1 = []   
    l2 = []
    for i in A:
        for j in B:
          if i == j
           l1.append[i]
    ...
    l1 = set(l1)
    

    我不知道这是不是一个好的方法,另外还有一点(b中没有的)。

    我不能用 else on i!=j ,因为重复和B中没有顺序。

    5 回复  |  直到 6 年前
        1
  •  2
  •   ravishankar chavare    6 年前
    #to create a list with ids that are in A and found in B (unique)
    resultlist=list(set(A)&set(B))
    print(list(set(A)&set(B)))
    
    
    #to create a list of ids that are in A and have no corresponding in B (unique)
    print(list(set(A)-set(B)))
    
    
    #the numbers in B, that don't have a corespondent in A
    print(list(set(B)-set(A)))
    
        2
  •  1
  •   haccks    6 年前

    将列表转换为 set

    >>> set_A = set(A)
    >>> set_B = set(B)
    >>> list(set_A & set_B)
    [1, 3, 5, 7, 9, 14]         # set intersection
    
    >>> list(set_A - set_B)     # set difference
    [12]
    
    >>> list(set_B - set_A)
    [2]
    
        3
  •  1
  •   Alexander James Pane    6 年前

    对于python,您可以简单地使用set类型:

    list(set(A) & set(B))
    

    A B .

    list(set(A) - set(B))
    

    将返回一个包含中所有元素的列表 A 而不是在 .

    反之亦然:

    list(set(B) - set(A))
    

    将返回一个包含中所有元素的列表 B 而不是在 .

        4
  •  1
  •   Zapho Oxx    6 年前

    您可以使用'a in L'功能,如果元素在列表中,该功能将返回True。例如

    A = [1,3,5,7, 9, 12, 14]
    B = [1,2,3,3,7,9,7,3,14,14,1,3,2,5,5]
    
    common = []
    uncommon = []
    
    for a in A:
        if a in B:
          common.append(a)
        else:
          uncommon.append(a)
    print(common)
    print(uncommon)
    

    这会给你一个很好的提示,告诉你如何处理另一个问题。

        5
  •  1
  •   user2390182    6 年前

    set operations

    A = [1, 3, 5, 7, 9, 12, 14]
    B = [1, 2, 3, 3, 7, 9, 7, 3, 14, 14, 1, 3, 2, 5, 5]
    
    sa = set(A)
    sb = set(B)
    
    # intersection
    l1 = list(sa & sb)
    # [1, 2, 3, 5, 7, 9, 12, 14]
    
    # differences
    l2 = list(sa - sb)
    # [12]
    l3 = list(sb - sa)
    # [2]