Skip to content

Boucle “For” première itération

Solution:

Quelque chose comme ça devrait fonctionner.

for i, member in enumerate(something.get()):
    if i == 0:
         # Do thing
    # Code for everything

Cependant, je recommanderais fortement de réfléchir à votre code pour voir si vous devez vraiment le faire de cette façon, car c’est en quelque sorte “sale”. Il vaudrait mieux récupérer l’élément qui nécessite un traitement spécial en amont, puis effectuer un traitement régulier pour tous les autres dans la boucle.

La seule raison que je pouvais voir pour ne pas le faire de cette façon est pour une grande liste que vous obtiendriez d’une expression de générateur (que vous ne voudriez pas récupérer à l’avance car elle ne rentrerait pas dans la mémoire), ou des situations similaires .

Vous avez plusieurs choix pour le Tête-queue design pattern.

seq= something.get()
root.copy( seq[0] )
foo( seq[0] )
for member in seq[1:]:
    somewhereElse.copy(member)
    foo( member )

Ou ca

seq_iter= iter( something.get() )
head = seq_iter.next()
root.copy( head )
foo( head )
for member in seq_iter:
    somewhereElse.copy( member )
    foo( member )

Les gens se plaignent que ce n’est en quelque sorte pas “DRY” parce que le code “toto redondant (membre)”. C’est une affirmation ridicule. Si cela était vrai, toutes les fonctions ne pourraient être utilisées qu’une seule fois. Quel est l’intérêt de définir une fonction si vous ne pouvez avoir qu’une seule référence ?

que diriez-vous:

my_array = something.get()
for member in my_array:
    if my_array.index(member) == 0:
        root.copy(member)
    else:
        somewhereElse.copy(member)
    foo(member)

ou peut-être:

for index, member in enumerate(something.get()):
    if index == 0:
        root.copy(member)
    else:
        somewhereElse.copy(member)
    foo(member)

Documentation de la méthode d’indexation.



Articles Similaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.