我想结合两个列表并删除重复值。
假设我有两个列表,如
IN
我想输出如下:
lst1 = [23,15,46,76,45]
lst2 = [43,32,15,49,45,10]
在结果列表中,必须遵循元素顺序,如第二个列表元素43中的0位置,之后32个进入结果列表,之后49个来到,之后10个来到等等...
答案 0 :(得分:1)
您可以使用set
:
In [1]: set(lst1).union(set(lst2))
Out[1]: {10, 15, 23, 32, 43, 45, 46, 49, 76}
如果订单很重要,您可以使用:
resulting_list = lst1
resulting_list.extend(x for x in lst2 if x not in resulting_list)
输出:
[23,15,46,76,45,43,32,49,10]
答案 1 :(得分:0)
如果您不需要列表的顺序,也许您可以尝试:
set(lst1).union(set(lst2))
你可以获得一套{32, 10, 43, 76, 45, 46, 15, 49, 23}
。
如果您想保留列表的顺序,可以试试这个:
print(lst1+[i for i in lst2 if i not in lst1])
输出:
[23, 15, 46, 76, 45, 43, 32, 49, 10]
如果lst1
和lst2
中可能存在重复的元素,例如:
lst1 = [1,2,1,3]
lst2 = [2,4,5,4]
你仍然希望保留这两个列表的顺序,你可以删除重复的元素,然后将它们组合起来:
ts = set()
rm_duplicate=lambda l:[x for x in l if not (x in ts or ts.add(x))]
print(rm_duplicate(lst1)+[i for i in rm_duplicate(lst2) if i not in lst1])
结果:
[1, 2, 3, 4, 5]
答案 2 :(得分:0)
只需添加第一个列表中已有的元素,即第二个:
for element in list_2:
if element not in list_1:
list_1.append(element)
答案 3 :(得分:0)
result = lst1 + [element for element in lst2 if element not in lst1]
答案 4 :(得分:0)
Python有一个内置的set
type来执行此类操作:
set(lst1).union(set(lst2))
答案 5 :(得分:0)
如果您的列表元素是可清除的:
st1 = set(lst1)
result = lst1 + [i for i in lst2 if not i in st1]
在您的玩具示例中,您不会感觉到差异,但如果列表中等大小,转换为设置将加快元素查找。
答案 6 :(得分:0)
你可以使用像这样的设置,
{{1}}