2016-07-19 13 views
1

Sag ich habe dlist=[[1, 2], [3, 4], [5, 6], [7, 8],[9,10]]. Und ich möchte eine Kombination von zwei Listen mit ihren Indizes zusammen haben.Itertools Kombination mit Index

gewünschte Ausgabe ist

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

folgenden Code

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

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

schafft statt ..

+0

Woher kommen die '0's? subtrahierst du von jedem Element ...? – Will

+0

das ist Index von [1,2] in dlist – revry

Antwort

3

Sie es fast geschafft. Nur müssen Sie Ihre clist in gewünschtes Format konvertieren. itertools.combinations(enumerate(dlist), 2) wird Iterator von Kombinationen im Format ((index_number_of_sub_arr1, sub_arr1), (index_number_of_sub_arr2, sub_arr2)) zurückgeben. Sie müssen nur über Iterator gehen in das Format [[index_number_of_sub_arr1, index_number_of_sub_arr2],[sub_arr1, sub_arr2]] konvertieren.

# 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 ]