有条件合并列表

时间:2018-12-25 09:39:45

标签: python list

我正在尝试根据以下规则合并两个列表:

  

list1中的第一个元素应与list2中的最后一个元素合并,list1中的第二个元素应与list2中的第二个元素合并,以此类推。

     

如果list1 / list2中的元素为None,则另一个列表中的相应元素应保留在合并列表中。

我觉得我可能必须在这里使用链表,但不确定。我试图通过遍历列表来找出解决方案,但是我无法弄清楚这里的逻辑。

def merge_list(list1, list2):
    merged_data=""
    new_str=""
    #write your logic here
    for l1 in list1:
        for l2 in list2[::-1]:
            if l1 is None or l2 is None:
                pass
            else:
                new_str = l1+l2
                i=list2.index(l2)
                print(new_str)
            break
    #return resultant_data


list1=['A', 'app','a', 'd', 'ke', 'th', 'doc', 'awa']
list2=['y','tor','e','eps','ay',None,'le','n']
merged_data=merge_list(list1,list2)
print(merged_data)
  

预期输出:

“每天有一个苹果让医生远离我”

9 个答案:

答案 0 :(得分:2)

您可以使用zip同时遍历两个列表:

def merge_list(lst1,lst2):
    s = ''
    for x, y in zip(lst1, lst2[::-1]):
        if y and x:
            s += x + y
        elif x:
            s += x
        elif y:
            s += y
        s += ' '
    return s[:-1]

list1 = ['A', 'app','a', 'd', 'ke', 'th', 'doc', 'awa']
list2 = ['y','tor','e','eps','ay',None,'le','n']
merged_data = merge_list(list1,list2)

print(merged_data)
# An apple a day keeps the doctor away

您可以缩短此时间并使用列表理解,如下所示(但是,我希望另一个更易于理解):

def merge_list(lst1,lst2):
    return ' '.join(x + y if x and y else x if x else y for x, y in zip(lst1, lst2[::-1]))

答案 1 :(得分:0)

假设两个列表的长度相同

>>> list1=['A', 'app','a', 'd', 'ke', 'th', 'doc', 'awa']
>>> list2=['y','tor','e','eps','ay',None,'le','n']
>>> ' '.join([l1 + l2 if l1 and l2 else l1 if l1 and not l2 else l2 for l1, l2 in zip(list1, reversed(list2)) if l1 and l2])
'An apple a day keeps the doctor away'

答案 2 :(得分:0)

确保列表的长度相同,则只需一个拉链就足够了。但是将None的值替换为''(空字符串)

["".join(row) for row in zip(list1, reversed(list2))]

=>

['An', 'apple', 'a', 'day', 'keeps', 'the', 'doctor', 'away']

答案 3 :(得分:0)

首先使用list comprehensions合并两个列表,然后将该列表转换为string

" ".join(str(x) for x in [list1[i]+list2[len(list2)-1-i] if list2[len(list2)-1-i] != None else list1[i] for i in range(len(list1))])
    'An apple a day keeps the doctor away'

答案 4 :(得分:0)

def fetch_index(list2, item_index):
    x = list2[::-1]
    return x[item_index]

def merge_list(list1, list2):
    list_3 = []
    #write your logic here
    for l1 in list1:
        l2 = fetch_index(list2, list1.index(l1))
        if l1 is None and l2 is None:
            pass
        elif l1 is None:
            list_3.append(l2)
        elif l2 is None:
            list_3.append(l1)
        else:
            list_3.append(l1+l2)
    return(list_3)

list1=['A', 'app','a', 'd', 'ke', 'th', 'doc', 'awa']
list2=['y','tor','e','eps','ay',None,'le','n']
x = merge_list(list1,list2)
print ' '.join(i for i in x)

如果不想使用zip,请使用更长的版本

答案 5 :(得分:0)

不使用zip的简短答案。

" ".join([list1[x]+[y if y is not None else '' for y in list2 ][::-1][x] for x in range(len(list1)-1)]

答案 6 :(得分:0)

list1=['A', 'app','a', 'd', 'ke', 'th', 'doc', 'awa']
list2=['y','tor','e','eps','ay',None,'le','n']
a=list2.remove(None)
list2.insert(5,"")
list3 = [ str(x[0]) + x[1]   for x in zip(list1, list2[::-1]) ]
print ' '.join(list3)

输出:

  

每天有一个苹果让医生远离我

答案 7 :(得分:0)

l1=['A', 'app','a', 'd', 'ke', 'th', 'doc', 'awa']
l2=['y','tor','e','eps','ay',None,'le','n']
a=l2[::-1]
l3=[]
for i in range(len(l1)):
    if(l1[i] is None or a[i] is None):
        l3.append(l1[i])`enter code here`
    else:
        l3.append(l1[i]+a[i])


print(" ".join(l3))

答案 8 :(得分:0)

list1=['A', 'app','a', 'd', 'ke', 'th', 'doc', 'awa']
list2=['y','tor','e','eps','ay',None,'le','n']
s=''
new=''
for i in list1:
    for j in list2[::-1]:
        if i==None:
            i=''
        elif j==None:
            j=''
        new=i+j
        s=s+new+' '
        list2.pop(-1)
        break
print(s)