如何将两个列表合并到一个子列表列表中,其中每个子列表根据列表中项目的顺序进行配对?

时间:2014-01-29 03:49:44

标签: python list sequence sublist

如何将两个列表合并到一个子列表列表中,其中每个子列表根据列表中项目的顺序进行配对?

换句话说,我有三个列表,我想根据第三个列表将两个列表中的值配对以形成子列表。遵循这样做的规则是:

如果lst_b中的值落在lst_a中的lst_c中的值之间,则将其与lst_a中也包含在lst_c中的先前值配对。例如,因为'aad'落在lst_c中的两个值'KEY1'和'KEY2'之间,所以将它与'KEY1'配对,因为它在'KEY2'之前。

lst_a = ['KEY1','aad','b','KEY2','c','KEY3','d','e','f']

lst_b = ['aad','b','c','d','e','f']

lst_c = ['KEY1','KEY2','KEY3']


desired_list = [['KEY1','aad'],['KEY1','b'],['KEY2','c'],['KEY3','d'],['KEY3','e'],['KEY3','f']]

我甚至认为这在python中是不可能的,或者如果它是,它会很复杂,所以如果是这样,请告诉我。

2 个答案:

答案 0 :(得分:2)

lst_blst_c不应该是list,它们应该是set。你关心的只是会员资格。

以下是我编写生成器的方法:

def do_stuff(li, s_val, s_key):
    key = li[0]
    for x in li[1:]:
        if x in s_val:
            yield key,x
        elif x in s_key:
            key = x

演示:

list(do_stuff(lst_a,set(lst_b),set(lst_c)))
Out[24]: 
[('KEY1', 'aad'),
 ('KEY1', 'b'),
 ('KEY2', 'c'),
 ('KEY3', 'd'),
 ('KEY3', 'e'),
 ('KEY3', 'f')]

我在上面假设你的lst_a的第一个元素是一个键,因为你的算法是未定义的。

答案 1 :(得分:1)

这是一种简单的方法。

desired_list = []
k = None
for a in lst_a:
    if a in lst_c:
        k = a
    elif a in lst_b:
        desired_list.append([k, a])