Imprimiendo todos los valores de múltiples listas al mismo tiempo

Supongamos que tengo 3 listas como estas

l1 = [1,2,3] l2 = [4,5,6] l3 = [7,8,9] 

¿Cómo puedo imprimir todo de estas listas al mismo tiempo? ¿Cuál es la forma pythonica de hacer algo así?

 for f in l1,l2 and l3: print f 

Esto solo parece estar teniendo en cuenta 2 listas.

Salida deseada: para cada elemento en todas las listas, los estoy imprimiendo usando una función diferente

 def print_row(filename, status, Binary_Type): print " %-45s %-15s %25s " % (filename, status, Binary_Type) 

y llamo a la función anterior dentro del bucle for.

Creo que es posible que desee zip

 for x,y,z in zip(l1,l2,l3): print x,y,z #1 4 7 #2 5 8 #3 6 9 

Que estas haciendo:

 for f in l1,l2 and l3: 

es un poco extraño Básicamente es equivalente a for f in (l1,l3): ya que l2 and l3 devuelve l3 (asumiendo que l2 y l3 están vacíos, de lo contrario, devolverá el vacío).

Si solo desea imprimir cada lista consecutivamente, puede hacer:

 for lst in (l1,l2,l3): #parenthesis unnecessary, but I like them... print lst #[ 1, 2, 3 ] #[ 4, 5, 6 ] #[ 7, 8, 9 ] 

No es necesario usar zip , solo agréguelos usando el operador + . l1 + l2 + l3 crea una nueva lista que es la combinación de l1 , l2 y l3 por lo que simplemente puede recorrer eso, así:

 for f in l1+l2+l3: print(f) 

Su uso del operador and es incorrecto. La otra razón por la que su código no funciona es mediante el uso de comas (como l1, l2, l3 ) crea una tupla, que es un contenedor que ahora contiene sus 3 listas. Por lo tanto, cuando intente recorrer 1 l1, l2, l3 , pasará por cada elemento de esa tupla (que son las listas) y no por todos los elementos en las listas como pretende.

Si quieres imprimir

 1 4 7 2 5 8 3 6 9 

Hacer:

 for i,j,k in zip(l1,l2,l3): print i,j,k 

Depende de lo que quieras lograr,

 >>> #Given >>> l1,l2,l3 = [1,2,3],[4,5,6],[7,8,9] >>> #To print row wise >>> import itertools >>> for f in itertools.chain(l1,l2,l3): print(f,end=" ") 1 2 3 4 5 6 7 8 9 >>> #To print column wise >>> for f in itertools.izip(l1,l2,l3): print(*f,end=" ") 1 4 7 2 5 8 3 6 9 >>> 

o la siguiente implementación que funcionará en Python 2.7

 >>> for f in itertools.chain(*itertools.izip(l1,l2,l3)): print f, 1 4 7 2 5 8 3 6 9 >>> 

Si sus listas no son todas de la misma longitud, a menudo es mejor usar el map :

 >>> l1 = [1, 2, 3] >>> l2 = [4, 5, 6] >>> l3 = [7, 8, 9, 2] >>> for x, y, z in map( None, l1, l2, l3): ... print x, y, z ... 1 4 7 2 5 8 3 6 9 None None 2 

Para expandir sobre la respuesta Abhijit, puede usar el generador de itertools como el iterable dentro de una lista de comprensión.

 >>> [ n for n in itertools.chain(l1, l2, l3) ] [1, 2, 3, 4, 5, 6, 7, 8, 9] 

Si quiere decir que tiene 3 listas de igual longitud y desea imprimir su contenido en 3 columnas, entonces, ¿qué le parece zip () para conectar las columnas y una lista de comprensión para imprimir () en cada iteración?

 [ print(row) for row in zip(l1, l2, l3) ] 

Lo anterior imprimirá reproducciones de tuple (s). Si desea formatear los valores de lo contrario:

 [ print("{} / {} / {}".format(*row)) for row in zip(l1, l2, l3) ] 

Nadie dijo que tienes que usar el resultado de una lista de comprensión.