2012-02-04 29 views
61

Tengo una lista con sublistas en ella. Quiero imprimir todas las listas secundarias con longitud igual a 3.Looping sobre una lista en Python

que estoy haciendo lo siguiente en Python:

for x in values[:]: 
    if len(x)==3: 
     print x 

'valores' es la lista original. ¿El código anterior imprime toda la sublista con una longitud igual a 3 para cada valor de x? Quiero mostrar las sublistas donde length==3 solo una vez.

el problema está resuelto. el problema es con el editor de eclipse. No entiendo el motivo, pero muestra solo la mitad de mi lista cuando ejecuto mi ciclo.

¿Hay alguna configuración que deba cambiar en eclipse?

+2

¿Por qué comparar la longitud con 2 en el código entonces ?! – kennytm

+0

¿Podría hacer 'print values' y mostrar el resultado aquí? * editar: * o simplemente verificar que no esté en blanco. – FakeRainBrigand

Respuesta

5

También puede usar for x in values en lugar de for x in values[:]; este último hace una copia innecesaria. También, por supuesto que los controles de código para una longitud de 2 en lugar de 3 de ...

El código sólo imprime un elemento por valor de x - x y se itera sobre los elementos de values, que son las sublistas. Por lo tanto, solo imprimirá cada sublista una vez.

+4

values ​​[:] corta todos los elementos de valores, ¿verdad? Supongo que se refería a la lista temporal creada a partir del corte. Solo quiero asegurarme. – batbrat

88

Prueba de esto,

x in mylist es mejor y más fácil de leer que x in mylist[:] y su len(x) debe ser igual a 3.

>>> mylist = [[1,2,3],[4,5,6,7],[8,9,10]] 
>>> for x in mylist: 
...  if len(x)==3: 
...  print x 
... 
[1, 2, 3] 
[8, 9, 10] 

o si necesita un uso más Pythonic list-comprehensions

>>> [x for x in mylist if len(x)==3] 
[[1, 2, 3], [8, 9, 10]] 
>>> 
Cuestiones relacionadas