¿Cómo puedo imprimir sublistas de cierta longitud? [closed]

3 minutos de lectura

avatar de usuario de user1188821
usuario1188821

Tengo una lista con sublistas en ella. 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)

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

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

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

  • Podrías hacer print values y mostrar la salida aquí? editar: o simplemente verifique que no esté en blanco.

    – bandolero

    4 de febrero de 2012 a las 3:22


  • No entiendo qué se pregunta aquí y cómo se relacionan la mayoría de las respuestas. ¡¿Qué tiene esto que ver con Eclipse?!

    – mkrieger1

    27 de junio de 2021 a las 8:42


Avatar de usuario de RanRag
RanRag

x in mylist es mejor y más legible que x in mylist[:] y tu 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 más uso de pythonic lista-comprensiones

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

  • Nota: “su len(x) debe ser igual a 3” se refiere a una revisión anterior de la pregunta que había len(x) == 2 como un error

    – mkrieger1

    27 de junio de 2021 a las 8:46

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

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

  • valores[:] elimina todos los elementos de los valores, ¿verdad? Supongo que te refieres a la lista temporal creada a partir del corte. Solo quiero asegurarme.

    – mocoso

    4 de febrero de 2012 a las 3:30

  • 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 aún están en values.

    – AsTeR

    15 de enero de 2019 a las 15:22


  • Gracias por aclararlo.

    – mocoso

    21 de enero de 2019 a las 13:27

Aquí está la solución que estaba buscando. Si desea crear List2 que contenga 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) es 11 (elementos), len(list2) solo habrá 10 elementos porque estamos comenzando nuestro ciclo for desde el elemento con índice 1 en list1 no desde el elemento con índice 0 en list1

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

    – Timv

    20 de marzo de 2019 a las 23:12

  • Esto no parece tener nada que ver con la pregunta.

    – mkrieger1

    27 de junio de 2021 a las 8:46

Avatar de usuario de Aaditya Shah
Aaditya Shah

Haz esto en su lugar:

values = [[1,2,3],[4,5]]
for x in values:
    if len(x) == 3:
       print(x)

¿Ha sido útil esta solución?