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

时间:2018-10-09 08:16:21

标签: python python-3.x list

我有2个列表A和B。

在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. 创建一个列表,其中ID位于A中,位于B中(唯一)
  2. 创建一个在A中但在B中没有对应ID(唯一)的ID列表
  3. 也很高兴:B中没有A的数字的数字。

我的方法是两个循环:

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

我不知道这是否是一个好方法,再加上2)点(b中没有什么)。

由于重复且B中没有顺序,所以我不能使用else on i!=j

5 个答案:

答案 0 :(得分:2)

#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)))

答案 1 :(得分:1)

将列表转换为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]

答案 2 :(得分:1)

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

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

将返回一个列表,其中包含列表AB之间的元素交集。

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

将返回一个列表,其中包含A中而不是B中的所有元素。

反之亦然:

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

将返回一个列表,其中包含B中而不是A中的所有元素。

答案 3 :(得分:1)

使用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]

答案 4 :(得分:1)

您可以使用“ 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)

这应该给您一个很好的提示,说明如何解决另一个问题。 最好