2016-09-22 2 views
0

У меня есть два списка, которые имеют соответствующие элементы. Например:Групповое совпадение в список списков

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 ] 

Это означает, что для каждого элемента e1 из L1 мы будем искать элементы L2, end с _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', ....]' –

Смежные вопросы