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?
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 a3
” se refiere a una revisión anterior de la pregunta que habíalen(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
Aaditya Shah
Haz esto en su lugar:
values = [[1,2,3],[4,5]]
for x in values:
if len(x) == 3:
print(x)
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