¿Saltar primera entrada en para bucle en python?

En python, ¿cómo hago algo como:

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

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' 

Para omitir el primer elemento en Python, simplemente puede escribir

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

o saltarse el último elem

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

Puedes usar este concepto para cualquier secuencia.

Aquí hay una función de generador más general que omite 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] 

La mejor manera de omitir el primer artículo (s) es:

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

En este caso, islice se invoca con un punto inicial de 1 y un punto final de Ninguno, lo que significa el final del iterador.

Para poder omitir elementos desde el final de un iterable, debe conocer 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 primeros y últimos elementos de la lista de autos.

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

Basado en la respuesta de @SvenMarnach, pero un poco más simple y sin usar deque

 >>> def skip(iterable, at_start=0, at_end=0): it = iter(iterable) it = itertools.islice(it, at_start, None) it, it1 = itertools.tee(it) it1 = itertools.islice(it1, at_end, None) return (next(it) for _ in it1) >>> list(skip(range(10), at_start=2, at_end=2)) [2, 3, 4, 5, 6, 7] >>> list(skip(range(10), at_start=2, at_end=5)) [2, 3, 4] 

También timeit en cuenta que, según el resultado de mi timeit , esto es ligeramente más rápido que la solución deque

 >>> iterable=xrange(1000) >>> stmt1=""" def skip(iterable, at_start=0, at_end=0): it = iter(iterable) it = itertools.islice(it, at_start, None) it, it1 = itertools.tee(it) it1 = itertools.islice(it1, at_end, None) return (next(it) for _ in it1) list(skip(iterable,2,2)) """ >>> stmt2=""" 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() list(skip(iterable,2,2)) """ >>> timeit.timeit(stmt = stmt1, setup='from __main__ import iterable, skip, itertools', number = 10000) 2.0313770640908047 >>> timeit.timeit(stmt = stmt2, setup='from __main__ import iterable, skip, itertools, collections', number = 10000) 2.9903135454296716 

Para omitir el primer elemento de una list , puede utilizar:

 for l in lines[1:]: print(l) 

o next () :

 for l in lines: next() print(l) 

Bueno, tu syntax no es realmente Python, para empezar.

Las iteraciones en Python están sobre el contenido de los contenedores (bueno, técnicamente se trata de iteradores), con una syntax for item in container . En este caso, el contenedor es la lista de cars , pero desea omitir el primer y el último elemento, lo que significa que los cars[1:-1] (las listas de python se basan en cero, los números negativos cuentan desde el final y : syntax de corte

Entonces quieres

 for c in cars[1:-1]: do something with c 

Un método alternativo:

 for idx, car in enumerate(cars): # Skip first line. if not idx: continue # Skip last line. if idx + 1 == len(cars): continue # Real code here. print car 

Si los cars son una secuencia, simplemente puedes hacerlo.

 for car in cars[1:-1]: pass 

El proyecto more_itertools extiende itertools.islice para manejar índices negativos.

Ejemplo

 import more_itertools as mit iterable = 'ABCDEFGH' list(mit.islice_extended(iterable, 1, -1)) # Out: ['B', 'C', 'D', 'E', 'F', 'G'] 

Por lo tanto, puede aplicar con elegancia elementos de división entre el primer y el último elemento de un iterable:

 for car in mit.islice_extended(cars, 1, -1): # do something 

Lo hago así, a pesar de que parece un hack, siempre funciona:

 ls_of_things = ['apple', 'car', 'truck', 'bike', 'banana'] first = 0 last = len(ls_of_things) for items in ls_of_things: if first == 0 first = first + 1 pass elif first == last - 1: break else: do_stuff first = first + 1 pass