如何结合两个列表?

时间:2014-06-10 21:34:23

标签: python list merge

我有2个列表

mylist1 = [ 23,   13, None, 65,   None, 966, None, None]
mylist2 = [ None, 13, 98,   None, 61,   966, 13,   2]

我需要将这两个列表合并到

[ 23,   13, 98, 65,   61, 966, 13, 2]

任何好的解决方案?

-

解决方案我已经选择了,谢谢@shaktimaan

mylist = [(a if a!=None else b) for a, b in zip(mylist1, mylist2)] 

4 个答案:

答案 0 :(得分:1)

假设它是两个列表中相应数字的ORing,这是获取输出列表的一种方法:

>>> mylist1 = [ 23,   13, None, 65,   None, 966, None, None]
>>> mylist2 = [ None, 13, 98,   None, 61,   966, 13,   2]
>>> mylis1 = [a if a else 0 for a in mylist1 ]
>>> mylis1
[23, 13, 0, 65, 0, 966, 0, 0]
>>> mylis2 = [a if a else 0 for a in mylist2 ]
>>> mylis2
[0, 13, 98, 0, 61, 966, 13, 2]
>>> output = [a | b for a, b in zip(mylis1, mylis2)]
>>> output
[23, 13, 98, 65, 61, 966, 13, 2]

答案 1 :(得分:1)

您应该查看内置的map函数。 map将函数应用于一个或多个列表的每个元素。例如:

>>> def addOne(x):
...     return x+1
... 
>>> map(addOne, [1, 2, 3, 4])
[2, 3, 4, 5]

有两个列表和一个lambda函数:

>>> map(lambda x,y: x+y, [1, 2, 3, 4], [2, 3, 4, 5])
[3, 5, 7, 9]

所以你只需要这样做:

combined_list = map(combine_function, mylist1, mylist2)

答案 2 :(得分:0)

您可以执行以下操作:

for i, n in enumerate(mylist1): mylist2[i]=mylist2[i] or n

如果两个列表都有相同位置的值(不同),则会选择mylist2中的值。

您可以交换列表以优先考虑mylist1,或者您可以使用maxmin或其他一些功能在不同的值之间进行选择:

for i, n in enumerate(mylist1): mylist2[i]=max(mylist2[i], n)

如果两者在给定位置都有None,它将保留在结果列表中。

答案 3 :(得分:0)

我试着精心制作:

mylist1 = [ 23,   13, None, 65,   None, 966, None, None]
mylist2 = [ None, 13, 98,   None, 61,   966, 13,   2]
newList = []

if len(mylist1)>len(mylist2):
    length = len(mylist1)
else:
    length = len(mylist2)

for i in range(length):
    if mylist1[i] and i<len(mylist1):
        newList.append(mylist1[i])
    if mylist2[i] and i<len(mylist2) and mylist2[i] != mylist1[i]:
        newList.append(mylist2[i])

print newList

打印出来:

[23, 13, 98, 65, 61, 966, 13, 2]