¿Omitir la primera entrada en for loop en python?

5 minutos de lectura

avatar de usuario
Rolando

En Python, ¿cómo hago algo como:

for car in cars:
   # Skip first and last, do work for rest

  • Soy un novato, pero he estado usando for n, i in enumerate(cars): if n!= 0: do something to i. la lógica es que agrega un ‘contador’ a cada valor que luego puede apuntar, por ejemplo, con if n == some_value. en este ejemplo, le haría algo a cada instancia de i, excepto a la primera.

    – usuario1063287

    7 de mayo de 2013 a las 7:24

avatar de usuario
Abhijit

Para omitir el primer elemento en Python, simplemente puede escribir

for car in cars[1:]:
    # Do What Ever you want

o para saltar el último elemento

for car in cars[:-1]:
    # Do What Ever you want

Puede utilizar este concepto para cualquier sequence (no por ninguna iterable aunque).

  • No para todos iterablespero para todos secuencias.

    – Sven Marnach

    09/04/2012 a las 20:27

  • ¿Qué tal el uso de la memoria? ¿Slice hace una nueva copia de la subsecuencia?

    – Viajero

    15 de marzo de 2019 a las 9:24

  • @Voyager Sí, hace una nueva copia.

    – Srinivas Reddy Thatiparthy

    16 de julio de 2019 a las 15:36

Las otras respuestas solo funcionan para una secuencia.

Para cualquier iterable, para omitir el primer elemento:

itercars = iter(cars)
next(itercars)
for car in itercars:
    # do work

Si quieres saltarte el último, puedes hacer:

itercars = iter(cars)
# add 'next(itercars)' here if you also want to skip the first
prev = next(itercars)
for car in itercars:
    # do work on 'prev' not 'car'
    # at end of loop:
    prev = car
# now you can do whatever you want to do to the last one on 'prev'

  • También vea la respuesta de Sven Marnach

    – agf

    5 de junio de 2013 a las 20:06

  • Descubrí que hacer cars.pop(0) y cars.pop() funciona bien.

    – dreamwork801

    23 de octubre de 2018 a las 13:37

  • @ dreamwork801 Mi respuesta y la de Sven, que vinculo en el primer comentario, funcionan para cualquier iterable, incluso infinito, ya que no requieren una operación O (n) en los datos antes de que comience la iteración. Su sugerencia, y la de Abhjit, solo funcionan para secuencias, no iterables.

    – agf

    23 oct 2018 a las 18:17

avatar de usuario
roe shenberg

La mejor manera de omitir los primeros elementos es:

from itertools import islice
for car in islice(cars, 1, None):
    pass
    # do something

islice en este caso se invoca con un punto de inicio de 1y un punto final de Noneque significa el final de la iterable.

Para poder omitir elementos desde el final de un iterable, necesita saber su longitud (siempre es posible para una lista, pero no necesariamente para todo lo que puede iterar). por ejemplo, islice(cars, 1, len(cars)-1) omitirá los elementos primero y último en cars.

  • Eche un vistazo a la respuesta (infravalorada) de Sven. Cubre la omisión de un número arbitrario de elementos al principio y/o al final de cualquier uso iterable islice bastante bien, sin conocer la longitud ni almacenar más elementos en memoria a la vez de los absolutamente necesarios.

    – agf

    17 de octubre de 2012 a las 2:12


  • La respuesta de Sven en realidad almacenará todo el iterador en la memoria: collections.deque se ejecutará a través del iterador. Intenta hacer algo como collections.deque(xrange(10000000)). No es necesario almacenar todos los enteros en la memoria si desea omitir el primer elemento…

    – Roee Shenberg

    4 de diciembre de 2012 a las 11:04

  • Un islice es lo que se pasa al deque, no todo el iterador, y es solo la longitud de la cantidad de elementos que se omitirán al final. No almacena todo el iterador en la memoria.

    – agf

    4 de diciembre de 2012 a las 14:16

Aquí hay una función generadora más general que salta cualquier cantidad de elementos desde el principio y el final de un iterable:

def skip(iterable, at_start=0, at_end=0):
    it = iter(iterable)
    for x in itertools.islice(it, at_start):
        pass
    queue = collections.deque(itertools.islice(it, at_end))
    for x in it:
        queue.append(x)
        yield queue.popleft()

Ejemplo de uso:

>>> list(skip(range(10), at_start=2, at_end=2))
[2, 3, 4, 5, 6, 7]

avatar de usuario
kurzedmetal

for item in list_name[1:-1]:
    #...do whatever

  • no usar list como nombre de variable

    – Abhijit

    09/04/2012 a las 20:17

  • el OP solo quiere omitir el primer elemento. porque :-1 ?

    – luke14free

    09/04/2012 a las 20:23

  • en realidad no es reservado; el nombre list se puede volver a encuadernar. por eso tu no deberíamás bien que no poderúsalo.

    – jscs

    09/04/2012 a las 20:24

  • @ luke14free, la pregunta dice omitir el primer elemento, pero su comentario de código implica que realmente quiere omitir el primero y el último.

    – JerseyMike

    09/04/2012 a las 20:27

  • @ luke14free eso es lo que dice el título, no lo que escribió dentro del código: “omitir si es el primero o el último”

    – KurzedMetal

    9 de abril de 2012 a las 20:28

avatar de usuario
HasanAlyazidi

Ejemplo:

mylist=['one','two','three','four','five']
for i in mylist[1:]:
   print(i)

En el inicio del índice de Python desde 0, podemos usar el operador de corte para realizar manipulaciones en la iteración.

for i in range(1,-1):

  • no usar list como nombre de variable

    – Abhijit

    09/04/2012 a las 20:17

  • el OP solo quiere omitir el primer elemento. porque :-1 ?

    – luke14free

    09/04/2012 a las 20:23

  • en realidad no es reservado; el nombre list se puede volver a encuadernar. por eso tu no deberíamás bien que no poderúsalo.

    – jscs

    09/04/2012 a las 20:24

  • @ luke14free, la pregunta dice omitir el primer elemento, pero su comentario de código implica que realmente quiere omitir el primero y el último.

    – JerseyMike

    09/04/2012 a las 20:27

  • @ luke14free eso es lo que dice el título, no lo que escribió dentro del código: “omitir si es el primero o el último”

    – KurzedMetal

    9 de abril de 2012 a las 20:28

avatar de usuario
maninthecomputer

Aquí está mi opción preferida. No requiere agregar mucho al ciclo y no usa nada más que herramientas integradas.

Ir desde:

for item in my_items:
  do_something(item)

a:

for i, item in enumerate(my_items):
  if i == 0:
    continue
  do_something(item)

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad