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?

usuario1188821
fuente
1
¿Podría hacer print valuesy mostrar la salida aquí? editar: o simplemente verifique que no esté en blanco.
Brigante
1
Mejor respuesta: stackoverflow.com/a/28072982/4561887
Gabriel Staples

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]]
>>>
RanRag
fuente
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.

comex
fuente
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

Kean Amaral
fuente
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)
Aaditya Shah
fuente