给定两个带后缀的列表:
l1 = ['C_1', 'B_1', 'A']
l2 = ['B_2', 'C_2', 'D']
我想像这样组合它们:
['C_1', 'C_2', 'B_1', 'B_2', 'A', 'D']
元素将与l1
作为锚。这意味着,如果C_*
出现在之前B_*
in l1
,相同的顺序将保留在输出中。此外,具有相同前缀的元素C_*
将按后缀升序分组在一起。带有后缀的元素按照它们出现的顺序放置,如上所示。
您可以假设中的所有元素l1
有后缀_1
,以及中的所有元素l2
有后缀_2
.
我试过这个:
from collections import OrderedDict
from itertools import chain
o = OrderedDict()
for x in l1 + l2:
o.setdefault(x.split('_')[0], []).append(x)
result = list(chain.from_iterable(o.values()))
哪个有效,但想知道是否有更简洁的方法可以做到这一点。
Edit:
后缀只是代表该元素出现在哪个列表中。假设我有C_1
from l1
, and C_2
from l2
, then C_*
元素出现的基础是l1
哪个是在l2
,在最终列表中(所以,它是... C_1, C_2...
).
此外,所有元素在l1
and l2
彼此和他们自己都是独一无二的。希望有帮助。