2013-05-05 14 views
25

Dato un elenco multiplo di lunghezza eventualmente variabile, voglio scorrere tutte le combinazioni di valori, un elemento da ciascuna lista. Per esempio:Iterate su tutte le combinazioni di valori in più elenchi in python

first = [1, 5, 8] 
second = [0.5, 4] 

allora voglio l'output di essere:

combined = [(1, 0.5), (1, 4), (5, 0.5), (5, 4), (8, 0.5), (8, 4)] 

voglio iterare l'elenco combinato. Come faccio a fare questo?

risposta

52

itertools.product dovrebbe fare il trucco.

>>> list(itertools.product([1, 5, 8], [0.5, 4])) 
[(1, 0.5), (1, 4), (5, 0.5), (5, 4), (8, 0.5), (8, 4)] 

noti che itertools.product restituisce un iteratore, quindi non c'è bisogno di convertirlo in un elenco se si sta solo andando a scorrere su di esso una volta.

es.

for x in itertools.product([1, 5, 8], [0.5, 4]): 
    # do stuff 
+0

Che dire se 'second = [0.5, 4, 1]' e consideriamo l'uscita '(1, 4)' è uguale a output '(4, 1)'? –

+1

@TheRedPea (Supponendo che tu abbia un '4' nel primo elenco, e vuoi solo output unici nel risultato) penso che dovrai solo filtrare in seguito, usando' set (tuple (ordinato (lst)) per lst in itertools.product (...)) 'o qualcosa del genere. – Volatility

+0

@Volatility, sarebbe anche possibile aggiungere queste combinazioni: '(0.5, 1), (0.5, 5), (0.5, 8), (4, 1), (4, 5), (4, 8) '? – Reman

Problemi correlati