如何组合两个从第二个删除重复的列表?

时间:2016-02-29 11:40:20

标签: python

如何组合两个列表,同时省略第二个列表中与第一个元组中第一个元组值具有相同第一元组值的项目?

e.g 如果我有两个列表:

a=[(1, 1), (2, 45), (7, 56), (32, 89)]
b=[(1, 34), (6, 89), (32, 75)]

新列表应为:

c=[(1, 1), (2, 45), (7, 56), (32, 89), (6, 89)] 

没有(1,34)或(32,75),因为1和32在第一个列表中。列表可以是任何大小。

3 个答案:

答案 0 :(得分:2)

您可以使用itertools.chain将列表a加入到一个列表进行检查,然后使用列表解析:

import itertools as it

full_a_list = list(it.chain(*a))
list_to_add = [i for i in b if i[0] not in full_a_list]
result = a + list_to_add

print(full_a_list)
[1, 1, 2, 45, 7, 56, 32, 89]

print(list_to_add)
[(6, 89)]

print(result)
[(1, 1), (2, 45), (7, 56), (32, 89), (6, 89)]

答案 1 :(得分:1)

  • 合并列表:comb = a + b
  • 使用稳定的排序对它们进行排序:comb.sort()(幸运的是,Python中的排序是稳定的)
  • 浏览已排序的列表并删除重复项

答案 2 :(得分:0)

a中构造一个与每个元组的第一个元素相对应的集合,并对b的元素使用列表解析,丢弃其第一个元素包含在集合中的元组

>>> a=[(1, 1), (2, 45), (7, 56), (32, 89)]
>>> b=[(1, 34), (6, 89), (32, 75)]
>>> a+[j for j in b if j[0] not in {i[0] for i in a}]
[(1, 1), (2, 45), (7, 56), (32, 89), (6, 89)]