Python: объединение двух списков и поддержание порядка - PullRequest
1 голос
/ 06 мая 2020

Я хочу объединить 2 списка в один список, и в этом одном списке я могу найти элементы двух списков в одном и том же порядке, например: input:

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

1 Ответ

1 голос
/ 06 мая 2020

Ваш вопрос неясен.

Если вы хотите объединить списки задач и выполнить каждую задачу только один раз, мы можем использовать наборы:

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_iterable

...