Recorriendo una lista en Python


177

Tengo una lista con sublistas. Quiero imprimir todas las sublistas con una longitud igual a 3.

Estoy haciendo lo siguiente en python:

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

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

El problema esta resuelto. El problema es con el editor Eclipse. No entiendo la razón, pero muestra solo la mitad de mi lista cuando ejecuto mi bucle.

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


1
¿Podría hacer print valuesy mostrar la salida aquí? editar: o simplemente verifique que no esté en blanco.
Brigante

Respuestas:


196

Prueba esto,

x in mylistes mejor y más legible que x in mylist[:]y len(x)debería 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 más uso pitónico de listas de comprensión

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

15

También puede usar en for x in valueslugar de for x in values[:]; este último hace una copia innecesaria. Además, por supuesto, ese código verifica una longitud de 2 en lugar de 3 ...

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


44
valores [:] corta todos los elementos de los valores, ¿verdad? Supongo que te referías a la lista temporal creada a partir de la división. Solo quiero asegurarme.
Batbrat

1
Gracias por mencionar la copia no deseada. @batbrat no se corta, se corta, lo que quiero decir es que los valores están duplicados y todavía están adentro values.
AsTeR

Gracias por aclararlo.
Batbrat

14

Aquí está la solución que estaba buscando. Si desea crear List2 que contiene la diferencia de los elementos numéricos en List1.

list1 = [12, 15, 22, 54, 21, 68, 9, 73, 81, 34, 45]
list2 = []
for i in range(1, len(list1)):
  change = list1[i] - list1[i-1]
  list2.append(change)

Tenga en cuenta que mientras len(list1)sea ​​11 (elementos), len(list2)solo serán 10 elementos porque estamos comenzando nuestro bucle for desde el elemento con el índice 1 en la lista1 no desde el elemento con el índice 0 en la lista1


Esto era justo lo que necesitaba, ya que necesitaba comenzar desde el índice 1 no 0. +1
timv

1

Haz esto en su lugar:

values = [[1,2,3],[4,5]]
for x in values:
    if len(x) == 3:
       print(x)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.