如何组合两个列表,同时省略第二个列表中与第一个元组中第一个元组值具有相同第一元组值的项目?
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在第一个列表中。列表可以是任何大小。
答案 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)
答案 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)]