2016-07-19 2 views
1

Скажем, у меня есть dlist=[[1, 2], [3, 4], [5, 6], [7, 8],[9,10]]. И я хочу иметь комбинацию из двух списков вместе со своими индексами.Комбинация Itertools с индексом

Желаемая выход

[[0,1],[[1,2],[3,4]]], [[0,2],[[1,2],[5,6]]] and so on.. 

Следующий код создает

clist.append([list(itertools.combinations(list(enumerate(dlist)), 2))])

[((0, [1, 2]), (1, [3, 4])), ((0, [1, 2]), (2, [5, 6])),.... 

вместо ..

+0

Откуда берутся '0'? вы вычитаете из каждого элемента ...? – Will

+0

, который является индексом [1,2] в dlist – revry

ответ

3

Вы почти там. Просто нужно преобразовать clist в желаемый формат. itertools.combinations(enumerate(dlist), 2) вернет итератор комбинаций в формате ((index_number_of_sub_arr1, sub_arr1), (index_number_of_sub_arr2, sub_arr2)). Вам просто нужно пройти через итератор, чтобы преобразовать его в формат [[index_number_of_sub_arr1, index_number_of_sub_arr2],[sub_arr1, sub_arr2]].

# this is like your current clist (iterator) 
tmp_list = itertools.combinations(enumerate(dlist), 2) 

# convertion to desired format 
clist = [ [[idx1, idx2], [arr1,arr2]] for ((idx1, arr1),(idx2,arr2)) in tmp_list ] 
Смежные вопросы