我有两个列表需要组合,其中第二个列表忽略第一个列表的任何重复...有点难以解释,所以让我展示一下代码的样子,以及我想要的结果.
first_list = [1, 2, 2, 5]
second_list = [2, 5, 7, 9]
# The result of combining the two lists should result in this list:
resulting_list = [1, 2, 2, 5, 7, 9]
Run Code Online (Sandbox Code Playgroud)
您会注意到结果具有第一个列表,包括其两个"2"值,但second_list还具有额外的2和5值的事实未添加到第一个列表中.
通常对于这样的事情,我会使用集合,但first_list上的一个集合将清除它已有的重复值.所以我只想知道实现这种理想组合的最佳/最快方法.
谢谢.
Ric*_*dle 145
您需要附加到第一个列表中的第二个列表中不在第一个列表中的元素是确定它们是哪个元素的最简单方法,如下所示:
first_list = [1, 2, 2, 5]
second_list = [2, 5, 7, 9]
in_first = set(first_list)
in_second = set(second_list)
in_second_but_not_in_first = in_second - in_first
result = first_list + list(in_second_but_not_in_first)
print result # Prints [1, 2, 2, 5, 9, 7]
Run Code Online (Sandbox Code Playgroud)
或者如果你喜欢单行8-)
print first_list + list(set(second_list) - set(first_list))
Run Code Online (Sandbox Code Playgroud)
Ned*_*der 49
resulting_list = list(first_list)
resulting_list.extend(x for x in second_list if x not in resulting_list)
Run Code Online (Sandbox Code Playgroud)
小智 19
你可以使用套装:
first_list = [1, 2, 2, 5]
second_list = [2, 5, 7, 9]
resultList= list(set(first_list) | set(second_list))
print(resultList)
# Results in : resultList = [1,2,5,7,9]
Run Code Online (Sandbox Code Playgroud)
小智 9
first_list = [1, 2, 2, 5]
second_list = [2, 5, 7, 9]
print( set( first_list + second_list ) )
Run Code Online (Sandbox Code Playgroud)
对我来说最简单的是:
first_list = [1, 2, 2, 5]
second_list = [2, 5, 7, 9]
merged_list = list(set(first_list+second_list))
print(merged_list)
#prints [1, 2, 5, 7, 9]
Run Code Online (Sandbox Code Playgroud)
resulting_list = first_list + [i for i in second_list if i not in first_list]
Run Code Online (Sandbox Code Playgroud)
如果使用numpy,则可以将其简化为一行代码:
a = [1,2,3,4,5,6,7]
b = [2,4,7,8,9,10,11,12]
sorted(np.unique(a+b))
>>> [1,2,3,4,5,6,7,8,9,10,11,12]
Run Code Online (Sandbox Code Playgroud)