2011-01-27 9 views
17

Sono sicuro che c'è un modo semplice e ovvio per farlo, ma sono stato googling e leggere i documenti e non riesco proprio a trovare nulla.ciclo su 2 elenchi, ripetendo il più breve fino alla fine del più lungo

Questo è ciò che voglio raggiungere:

la = ['a1','a2','a3','a4'] 
lb = ['b1','b2'] 
result = ['a1_b1','a2_b2','a3_b1','a4_b2'] 

Ho un elenco di date e alcuni di loro ha qualcosa segnata su di loro. Poi ho un elenco molto più grande di date e voglio inserire la lista più piccola all'interno della lista più grande quante più volte possibile. Probabilmente richiederà una sorta di ciclo in quanto ho bisogno di accedere alle date nella lista più grande per il risultato finale.

Per qualche motivo non riesco a vedere un buon modo per farlo.

risposta

9

Prova

result = ["_".join((i, j)) for i, j in itertools.izip(la, itertools.cycle(lb))] 
+1

Hai eseguito questo? Non è quello che l'OP chiedeva affatto. –

+1

@Daniel: Ci scusiamo per la pubblicazione di codice non testato. Corretto ora –

18

Supponendo la è più lungo di lb:

>>> import itertools 
>>> [x+'_'+y for x,y in zip(la, itertools.cycle(lb))] 
['a1_b1', 'a2_b2', 'a3_b1', 'a4_b2'] 
  • itertools.cycle(lb) restituisce un iteratore ciclico per gli elementi in lb.

  • zip(...) restituisce un elenco di tuple in cui ogni elemento corrisponde a un elemento in la associato all'elemento corrispondente nell'iteratore.

Problemi correlati