2016-09-22 133 views
0

我有两个匹配元素的列表。例如:Groupby匹配到列表中

L1 = [A, B] L2 = [1_A, i_X, i_Y, 2_A, x_B, y_B, z_B]

我想组匹配的因素纳入新的列表如下所示:

match_grouplist = [[1_A, 2_A],[x_B, y_B, z_B]] 

我试过,

pull = []; tmp = [] 
for entry in range(len(L1)): 
     spp = L[entry] 
     for ele in L2: 
      if ele.split("_")[1] == spp: 
       tmp.append(ele) 
     pull.extend(tmp) 

只产生一个列表。任何人都可以建议如何使这列表的列表?

由于提前,

AP

回答

1

下面是使用列表解析的溶液:

[ [e2 for e2 in L2 if e2.endswith('_'+e1)] for e1 in L1 ] 

这意味着,对于L1的每个元件E1我们将寻找L2的元素以_e1结尾并返回。

结果是[['1_A', '2_A'], ['x_B', 'y_B', 'z_B']]

+0

嗨,为什么我的解决方案没有工作?通过基础知识,我将它存储在列表中并将列表恢复到另一个列表中。因此它应该创建列表清单的权利? – Arun

+1

@Arun我在代码中看到两个问题。 - 结果不是列表列表,因为您使用'extend'将结果添加到_pull_,而不是'append'。 'extend'在列表中添加_tmp_的元素_pull_ - _tmp_应在第一个循环中重置。通过此代码,L1的第一个元素的结果将保留为第二个元素,从而产生'['1_A','2_A','1_A','2_A',....]' –