我想将两个列表合并到一个列表中,在这个列表中,我可以按相同的顺序找到两个列表的元素,例如:输入:
['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 中检出