6
votes

Comment puis-je imprimer uniquement chaque troisième index dans Perl ou Python?

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.


0 commentaires

8 Réponses :


8
votes

python: xxx


1 commentaires

Beau. Les tranches de python me donnent des érections.



12
votes

python xxx

perl xxx


1 commentaires

@friedo: merci pour le correctif :)



3
votes

en Perl: xxx


0 commentaires

9
votes

Perl 5.10 nouveau Etat variables est très pratique ici:

my @every_third = sub { grep { state $n = 0; ++$n % 3 == 0 } @list }->();


4 commentaires

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 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?



16
votes

Perl:

Comme avec la réponse de Dragtun, mais en utilisant un compte var: xxx


1 commentaires

Et peut être joliment placé dans un blocage: mon @new = do {mon $ i; grep {non ++ $ i% 3} @List};



1
votes
@array = qw(1 2 3 4 5 6 7 8 9);
print @array[(grep { ($_ + 1) % 3 == 0 } (1..$#array))];

0 commentaires

9
votes

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;


0 commentaires

5
votes

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];


0 commentaires