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

时间:2020-05-06 02:14:41

标签: python job-scheduling

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

order by
(CASE when sex = 'female' and trending = 1 then 1 END) DESC,
(CASE when sex = 'female' and trending = 0 then 2 END) DESC,
(CASE when sex = 'male' and trending = 1 then 3 END) DESC,
(CASE when sex = 'male' and trending = 0 then 4 END) DESC

输出应为:

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

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

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

1 个答案:

答案 0 :(得分:1)

您的问题不清楚。

如果您要合并任务列表并仅执行一次任务,我们可以使用集合:

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