2016-09-22 68 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',....]' –