我有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)]
答案 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
,或者您可以使用max
,min
或其他一些功能在不同的值之间进行选择:
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]