如何将两个列表合并到一个子列表列表中,其中每个子列表根据列表中项目的顺序进行配对?
换句话说,我有三个列表,我想根据第三个列表将两个列表中的值配对以形成子列表。遵循这样做的规则是:
如果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中是不可能的,或者如果它是,它会很复杂,所以如果是这样,请告诉我。
答案 0 :(得分:2)
lst_b
和lst_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])