2014-11-26 9 views
8

Il risultato creato da itertools.combinations di Python() è la combinazione di numeri. Per esempio:Python itertools.combinations: come ottenere gli indici dei numeri combinati

a = [7, 5, 5, 4] 
b = list(itertools.combinations(a, 2)) 

# b = [(7, 5), (7, 5), (7, 4), (5, 5), (5, 4), (5, 4)] 

Ma vorrei ottenere anche gli indici delle combinazioni come ad esempio:

index = [(0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 3)] 

Come posso farlo?

+6

'itertools.combinations (range (len (a)), 2)'? – jonrsharpe

risposta

8

È possibile utilizzare enumerare:

>>> a = [7, 5, 5, 4] 
>>> list(itertools.combinations(enumerate(a), 2)) 
[((0, 7), (1, 5)), ((0, 7), (2, 5)), ((0, 7), (3, 4)), ((1, 5), (2, 5)), ((1, 5), (3, 4)), ((2, 5), (3, 4))] 
>>> b = list((i,j) for ((i,_),(j,_)) in itertools.combinations(enumerate(a), 2)) 
>>> b 
[(0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 3)] 
+0

Grande, molte grazie. –

Problemi correlati