Python:两个列表的合并并保持顺序

问题描述 投票:0回答:1

我想在一个列表中合并2个列表,在这个列表中,我可以以相同的顺序找到两个列表的元素,例如:输入:

['10','22','3','4','5']
['22','3','5']

输出应为:

['10','22','3','4','5']

目标是将多个任务序列组合为一个序列,以便我们可以传递所有任务。我使用了下面的代码,但它重复了许多我们可以在逻辑上消除的任务,我想对其进行更多优化。

 def merge(L,R):
    S=[]
    n=min(len(L),len(R))
    for i in range(n):
        if L[i]==R[i]:
            S.append(L[i])
        else: 
            S.append(L[i])
            S.append(R[i])
    if len(L)>len(R):
        return(S+list(k for k in L[n:]))
    if len(R)>len(L):
        return(S+list(k for k in R[n:]))
    if len(L)==len(R):
        return(S)

# n is the number of tasks written in a text file before tasks and each task is written on a line

n=int(input())
resultat=[]
for i in range(n):
    line=input().split()
    resultat=merge(resultat,line)
print(resultat)
python job-scheduling
1个回答
0
投票

您的问题不清楚。

如果要合并任务列表并仅执行一次:

l1=['A' ,'B' ,'C' ,'D' ,'F']
l2=['C', 'D', 'E', 'F']
l3=['A', 'B', 'C', 'F']
l4=['A', 'C', 'B', 'F']
l5=['A','C' ,'D' ,'E' ,'F'] 
l6=['B', 'C', 'D', 'E', 'F']

import itertools as it
s=set(it.chain(l1, l1, l3, l4, l5, l6)))
print(list(s))

产生

['A', 'B', 'F', 'E', 'D', 'C']

否则,如果要在每个并行列表的每个步骤中都需要一组独特的任务,则>]

lo=[e for t in it.zip_longest(l1, l2, l3, l4, l5, l6) for e in set(t) if e is not None]
print(lo)

产生

['B', 'A', 'C', 'B', 'D', 'C', 'B', 'E', 'D', 'C', 'F', 'E', 'D', 'F']
© www.soinside.com 2019 - 2024. All rights reserved.