2011-01-27 11 views
17

Estoy seguro de que hay una manera fácil y obvia de hacer esto, pero he estado buscando y leyendo en Google los documentos y simplemente no puedo encontrar nada.bucle en 2 listas, repitiendo el más corto hasta el final del más largo

Esto es lo que quiero lograr:

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

tengo una lista de fechas y algunos de ellos tiene algo marcado en ellos. Luego tengo una lista mucho más amplia de fechas y quiero poner la lista más pequeña dentro de la lista más grande tantas veces como sea posible. Probablemente requiera algún tipo de bucle ya que necesito acceder a las fechas en la lista más grande para el resultado final.

Por alguna razón, no veo una buena manera de hacerlo.

Respuesta

9

Trate

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

¿Ejecutó esto? No es lo que el OP pidió en absoluto. –

+1

@Daniel: Perdón por publicar código no probado. Corregido ahora. –

18

Suponiendo la es más largo que 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) devuelve un iterador cíclico para los elementos en lb.

  • zip(...) devuelve una lista de tuplas en la que cada elemento corresponde a un elemento en la junto con el elemento coincidente en el iterador.

Cuestiones relacionadas