合并两个列表,同时保持顺序并删除重复项

时间:2019-02-01 18:48:31

标签: python

我想在保持顺序并且不允许重复的同时合并两个列表。

list1 = [4, 5, 2, 6]
list2 = [4, 1, 2, 9, 6]

output -> [4, 5, 2, 6, 1, 9]

我尝试过的是list(set(list1) | set(list2)),但这不能保持顺序。有没有办法通过列表理解做到这一点?

3 个答案:

答案 0 :(得分:5)

您可以使用dict.fromkeys方法:

list(dict.fromkeys(list1 + list2))

如果您使用的是Python 3.6或更早版本,则可以使用collections.OrderedDict代替dict

答案 1 :(得分:2)

list1 = [4, 5, 2, 6]
list2 = [4, 1, 2, 9, 6]

list3 = [item for item in list2 if item not in list1]

list1 += list3

比使用集合更具可读性

答案 2 :(得分:1)

您可以对 O(n)解决方案执行以下操作:

list1 = [4, 5, 2, 6]
list2 = [4, 1, 2, 9, 6]

s1 = set(list1)

result = list1 + [e for e in list2 if e not in s1]

print(result)

输出

[4, 5, 2, 6, 1, 9]