在Python中合并2个列表,给出一个列表优先级

时间:2015-10-10 14:39:53

标签: python list merge

我不打算连接列表。我只是想知道是否有更多的Pythonic方法来做到这一点:

def merge(list1, list2):
  result = []
  result += list1
  if len(list2) > len(list1):
    result += list2[len(list1):]
  return result

所以

a = [7,6,5,4,3,2,1]
b = [1,2,3,4,5,6,7,8,9,10] 
merge(a,b)
> [7,6,5,4,3,2,1,8,9,10] 

注意:我不确定合并是否是我在这里尝试做的规范术语。希望尽管如此我很清楚。

编辑:    我应该更清楚,上面的代码完全我想要的。我不关心重复出现。基本上,我想要的是第一个列表中的所有元素都在结果列表中的相同位置,但我希望结果列表的结尾用第二个列表中与该索引相对应的元素填充第二个列表比第一个列表大。

这是另一个例子:

a = [2,3,1,3,3,2]
b = [1,1,1,1,1,1,1,1,2,1,1]
merge(a,b)
 >  [2,3,1,3,3,2,1,1,2,1,1]
merge(b,a)
 >  [1,1,1,1,1,1,1,1,2,1,1]

3 个答案:

答案 0 :(得分:2)

您可以使用第二个列表的过滤版本添加第一个列表。您可以使用列表推导来循环遍历b的项目,并保留不在a中的项目:

>>> a+[i for i in b if i not in a]
[7, 6, 5, 4, 3, 2, 1, 8, 9, 10]

或者您可以使用numpy

>>> import numpy as np
>>> np.concatenate((a,np.setdiff1d(b,a)))
array([ 7,  6,  5,  4,  3,  2,  1,  8,  9, 10])

答案 1 :(得分:2)

如果您不关心重复项,可以使用列表切片。

def merge(a, b):
    return a + b[len(a):]

答案 2 :(得分:1)

不管两个列表的长度如何,

a + b[len(a):]都应该做你想做的事。 [1][1:]评估为空列表。它还保证创建一个独立于a和b的新列表。