Comment puis-je faire une boucle () ou foreach () dans Python et Perl, respectivement, qui imprime uniquement tous les troisième index? J'ai besoin de déplacer chaque troisième index vers un nouveau tableau. P>
8 Réponses :
python:
Beau. Les tranches de python me donnent des érections.
python perl p>
@friedo: merci pour le correctif :)
en Perl:
Perl 5.10 nouveau Etat variables est très pratique ici:
my @every_third = sub { grep { state $n = 0; ++$n % 3 == 0 } @list }->();
L'état est gentil. Mais si vous exécutez cette ligne plus d'une fois, cela ne fonctionnera que la première fois que si la longueur de la liste est un multiple de 3.
Bien souligné. Sa caractéristique légèrement gênante mais pas surprenante des variables d'état que vous pouvez contourner en encapsulant dans un sous anonyme (voir ma mise à jour).
Pourquoi ne pas faire map {$ _ * 3} 0. $ Max / 3 code> et utilisez-le pour votre indice de tranche?
En effet pourquoi pas. En fait, j'avais déjà prélevé la réponse de Gugod à ce sujet ;-) Je n'ai pas utilisé de carte car il y avait déjà une réponse similaire ici, mais pour une raison quelconque elle a été supprimée?
Comme avec la réponse de Dragtun, mais en utilisant un compte var: p>
Et peut être joliment placé dans un blocage: mon @new = do {mon $ i; grep {non ++ $ i% 3} @List};
@array = qw(1 2 3 4 5 6 7 8 9); print @array[(grep { ($_ + 1) % 3 == 0 } (1..$#array))];
Perl:
# The initial array my @a = (1..100); # Copy it, every 3rd elements my @b = @a[ map { 3 * $_ } 0..$#a/3 ]; # Print it. space-delimited $, = " "; say @b;
Vous pouvez faire une tranche dans Perl.
my @in = ( 1..10 ); # need only 1/3 as many indexes. my @index = 1..(@in/3); # adjust the indexes. $_ = 3 * $_ - 1 for @index; # These would also work # $_ *= 3, --$_ for @index; # --($_ *= 3) for @index my @out = @in[@index];