IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation et administration système Perl Discussion :

préciser le pas d'une liste en Perl ?


Sujet :

Programmation et administration système Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 22
    Par défaut préciser le pas d'une liste en Perl ?
    Bonjour,

    Je voudrais savoir s'il est possible de préciser le pas d'une liste en Perl comme c'est possible en Python et en Haskell.

    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Pas sûr de bien comprendre ce que tu veux. Peux-tu donner un exemple de ce que tu cherches à faire.

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Un exemple de boucle à porter par exemple

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Par défaut
    je me risque à une réponse:

    en python il est possible de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    l = range(1, 10)          #[1, 2, 3, 4, 5, 6, 7, 8, 9]
    l[0:5]                        #[1, 2, 3, 4, 5]
    l[0:5:2]                     #[1, 3, 5] => le 3ème éléments étant le "pas" de lecture
    l[0:5:2] = [11, 13, 15] #l -> [11, 2, 13, 14, 15, 6, 7, 8, 9]
    En Perl je n'ai jamais essayé mais je ne pense pas qu'on puisse le faire direstement (sans passer par une boucle for) ou faire quelque chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my @result = grep {$_ % 2 == 0} @tableau;   # ne récupère que les éléments de @tableau divisible par 2.
    mais ce n'est peut être pas toujours applicable (à réfléchir)

    Edit: La proposition grep ne correspond pas à ta demande en fait. Je la laisse mais en fait regarde la valeur et non l'indice

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 22
    Par défaut exemple Python Haskell
    Dans les versions récentes de Python, on peut aussi préciser le pas en ajoutant un : supplé-
    mentaire et en indiquant le pas par un entier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> animaux = ['girafe', 'tigre', 'singe', 'souris']
    >>> animaux[0:3:2]
    ['girafe', 'singe']
    en Haskell :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ghci> [2,4..20]
    [2,4,6,8,10,12,14,16,18,20]
    ghci> [3,6..20]
    [3,6,9,12,15,18]
    Et donc je voulais savoir si ce système existe en Perl.

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Je ne connais pas d'extension à l'opérateur range permettant de parcourir des tableaux par "pas".
    Mais je peux facilement le faire avec map sur l'indice du tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ perl -E '$pas = 2; @a=qw(a b c d e f g); say join ",", map $a[$pas*$_], 0 .. @a/$pas-1;'
    a,c,e

  7. #7
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    une solution possible:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $ perl -E '@a = a..z; say join " ", map $a[$_], grep $_%2==0, 0..$#a;'
    a c e g i k m o q s u w y

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 22
    Par défaut c'est bon j'ai trouvé
    Bon j'ai résolu mon problème, en fait je pensais tellement à la boucle foreach que j'en ai oublié la boucle for comme en C

    du coup pour par exemple avoir un pas de 10 dans une boucle de 0 à 90 je fais comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (my $var = 0; $var <= 90; $var+=10)
    {
        print "$var\n";
    }
    j'ai tilté en recherchant "step" sur cette page : http://hyperpolyglot.org/more

    merci et désolé

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RegEx] Lister des patterns qui ne sont pas dans une liste
    Par guidav dans le forum Langage
    Réponses: 2
    Dernier message: 28/12/2007, 18h14
  2. excel: colonne qui ne s'affiche pas dans une liste
    Par fast&furious dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/07/2006, 18h12
  3. Réponses: 7
    Dernier message: 24/01/2006, 11h03
  4. Réponses: 6
    Dernier message: 15/12/2005, 21h20
  5. Réponses: 1
    Dernier message: 27/10/2005, 21h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo