Python:两个列表的合并并维护顺序



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

['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)

您的问题不清楚。

如果你想合并任务列表并只执行一次每个任务,我们可以使用集合:

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']

如果输入列表的数量不同,请创建一个列表列表,然后从itertools.chain.from_interable 中检出

最新更新