2016-09-22 18 views
0

2つのリストに一致する要素があります。たとえば:リストのリストに一致するグループ

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コードに2つの問題があります。 - 'append'ではなく' extend'を使用して結果を_pull_に追加するので、結果はリストのリストではありません。 'extend'は_tmp_の要素をリストに追加します_pull_ - _tmp_は最初のループでリセットする必要があります。このコードではL1の最初の要素の結果は2番目の要素のために保持され、 '['1_A'、 '2_A'、 '1_A'、 '2_A'、....]' –

関連する問題