Índice de inicio para iterar la lista de Python

¿Cuál es la mejor manera de establecer un índice de inicio al iterar una lista en Python? Por ejemplo, tengo una lista de los días de la semana: domingo, lunes, martes, … sábado, pero quiero recorrer la lista desde el lunes. ¿Cuál es la mejor práctica para hacer esto?

Puede utilizar rebanar :

for item in some_list[2:]: # do stuff 

Esto comenzará en el tercer elemento y se repetirá hasta el final.

islice tiene la ventaja de que no necesita copiar parte de la lista

 from itertools import islice for day in islice(days, 1, None): ... 

Siempre puede realizar un bucle utilizando un contador de índice del bucle de estilo C convencional:

 for i in range(len(l)-1): print l[i+1] 

Siempre es mejor seguir el estilo de “bucle en cada elemento” porque eso es lo normal, pero si se interpone en tu camino, recuerda que el estilo convencional también es compatible, siempre.

stdlib te enganchará hijo!

deque.rotate() :

 #!/usr/local/bin/python2.7 from collections import deque a = deque('Monday Tuesday Wednesday Thursday Friday Saturday Sunday'.split(' ')) a.rotate(3) deque(['Friday', 'Saturday', 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday']) 

Aquí hay un generador de rotación que no necesita hacer una copia distorsionada de la secuencia de entrada … puede ser útil si la secuencia de entrada es mucho más grande que 7 elementos.

 >>> def rotated_sequence(seq, start_index): ... n = len(seq) ... for i in xrange(n): ... yield seq[(i + start_index) % n] ... >>> s = 'su m tu w th f sa'.split() >>> list(rotated_sequence(s, s.index('m'))) ['m', 'tu', 'w', 'th', 'f', 'sa', 'su'] >>> 

Si todo lo que desea es imprimir desde el Monday adelante, puede usar el método de index list para encontrar la posición donde “Monday” está en la lista, e iterar desde allí como se explica en otras publicaciones. El uso de list.index ahorra el código para el “lunes”, que es una posible fuente de error:

 days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'] for d in days[days.index('Monday'):] : print d 

Si desea “envolver” y rotar efectivamente la lista para comenzar con el lunes (en lugar de simplemente cortar los elementos antes del lunes):

 dayNames = [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', ] startDayName = 'Monday' startIndex = dayNames.index( startDayName ) print ( startIndex ) rotatedDayNames = dayNames[ startIndex: ] + dayNames [ :startIndex ] for x in rotatedDayNames: print ( x )