Quel est le meilleur moyen de définir un index de début lors de l'itération d'une liste en Python. Par exemple, j'ai une liste des jours de la semaine - dimanche, lundi, mardi, ... samedi - mais je veux parcourir la liste à partir de lundi. Quelle est la meilleure pratique pour cela?
Vous pouvez utiliser slicing :
for item in some_list[2:]:
# do stuff
Cela commencera au troisième élément et ira à la fin.
islice
a l'avantage de ne pas avoir besoin de copier une partie de la liste
from itertools import islice
for day in islice(days, 1, None):
...
Vous pouvez toujours faire une boucle en utilisant un compteur d'indexage la boucle de style C conventionnelle:
for i in range(len(l)-1):
print l[i+1]
Il est toujours préférable de suivre le style "boucle sur chaque élément" car c'est la chose normale à faire, mais si cela vous gêne, rappelez-vous que le style conventionnel est également toujours pris en charge.
stdlib va vous brancher fils!
#!/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'])
Voici un générateur de rotation qui n'a pas besoin de faire une copie déformée de la séquence d'entrée ... peut être utile si la séquence d'entrée est beaucoup plus grande que 7 éléments.
>>> 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 vous souhaitez uniquement imprimer à partir de Monday
, vous pouvez utiliser la méthode list
de index
pour trouver la position où "lundi" figure dans la liste, puis effectuer une itération expliqué dans d'autres articles. En utilisant list.index
vous évite de coder en dur l’index de "Monday", source potentielle d’erreur:
days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
for d in days[days.index('Monday'):] :
print d
Si vous souhaitez "parcourir" la liste et la faire pivoter pour commencer par lundi (au lieu de simplement supprimer les éléments avant lundi):
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 )