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

Python Discussion :

[Liste] Tableau + extraction de valeurs.


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 10
    Par défaut [Liste] Tableau + extraction de valeurs.
    Bonjour,

    Dans le cadre de mes cours, je dois réaliser un exercice :

    J'utilise Python 3.7
    Créer un tableau avec "n" lignes et "p" colonnes et y inscrire les valeurs de 1 à n*p et lorsque l'on tape un nombre (élément du tableau) le programme doit retourner la ligne et la colonne de l'élément en question sans utiliser ni numpy, ni de structure conditionnelle.

    Voila ce que j'ai réalisé pour le moment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    n = int(input("Entrez le nombre de lignes : "))
    p = int(input("Entrez le nombre de colonnes : "))
    T = [[j+1 for j in range(p)] for i in range(n)]
    print(T)
    Ceci me retourne pour n=5 et p=4 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]]
    ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    n = int(input("Entrez le nombre de lignes : "))
    p = int(input("Entrez le nombre de colonnes : "))
    np = n * p + 1
    T = list(range(1, np))
    print(T)
    qui me retourne pour n=5 et p=4
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
    Mais je voudrais avoir un résultat tel que toujours en fonction de "n" et "p" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16], [17, 18, 19, 20]]
    Merci pour l'aide que vous m'apporterez.

    Doky.

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 310
    Par défaut
    Salut,

    Comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    >>> n, p = 5, 4
    >>> t = []
    >>> c = 1
    >>> for i in range(n):
    ...     s = []
    ...     for j in range(p):
    ...             s.append(c)
    ...             c += 1
    ...     t.append(s)
    ... 
    >>> t
    [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16], [17, 18, 19, 20]]
    Pour l'écrire en une ligne, disons que ce sera le challenge du jour.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 10
    Par défaut
    Merci pour la réponse.

    Pourrais-je avoir une petite explication car avoir un code tout prêt c'est contre-productif

    Pour le fait d'inscrire le code en une ligne c'est un challenge ou c'est pas faisable ?

    Doky.

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 310
    Par défaut
    Je suis surpris, si tu sais écrire une list compréhension tu devrais comprendre mon code. Qui peut le plus peut le moins.

    Pour le challenge, c'est parce que j'ai essayé et que je n'ai pas trouvé.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 10
    Par défaut
    En fait, je connais tous les éléments de ton code mais je n'arrive pas à saisir le fonctionnement de celui-ci avec les ".append"

    Doky.

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 790
    Par défaut
    Citation Envoyé par Doky44 Voir le message
    En fait, je connais tous les éléments de ton code mais je n'arrive pas à saisir le fonctionnement de celui-ci avec les ".append"
    Pour le fun:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    n, p = 5, 4
    T = [ [ c*(n-1)+j for j in range(p)] for c, i in enumerate(range(n)) ]
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    pour le challenge j'ai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> n,p = 5,4
    >>> [list(range(1,n*p+1)[i:i+p]) for i,j in enumerate(range(1,n*p+1)) if not i%p]
    [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16], [17, 18, 19, 20]]
    ce qui est bien mais pas top.

    edit: arf, grillé par W.

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 10
    Par défaut
    Bien joué les gars.

    Par contre pour Wiztricks : il aurait fallu ajouter +1 pour que le résultat commence par 1 et finisse par 20. Autre chose, si tu changes les valeurs de n et p, ça fonctionne pas

    Pour BufferBob : c'est nickel

    Maintenant, je comprends mieux le code et j'ai réussi à terminer mon exercice.

    Merci à tous.

    Doky.

  9. #9
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 790
    Par défaut
    Citation Envoyé par Doky44 Voir le message
    Par contre pour Wiztricks : il aurait fallu ajouter +1 pour que le résultat commence par 1 et finisse par 20. Autre chose, si tu changes les valeurs de n et p, ça fonctionne pas
    Ah oui, j'ai mélangé n et p (et mollement testé):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    n, p = 5,4
    T = [ [ c*p+j for j in range(p)] for c, i in enumerate(range(n)) ]
    print(T)
    Citation Envoyé par Doky44 Voir le message
    Maintenant, je comprends mieux le code et j'ai réussi à terminer mon exercice.
    SI vous ne comprenez pas le code de VinsS, vous n'êtes pas encore au point côté liste de listes et les doubles boucles "for". Or une compréhension de liste, c'est juste écrire la même chose en plus condensé qui dépliée donnerait cette structure là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for c, i in enumerate(range(n)):
        for j in range(p):
            print(c*p+j)
    que l'on va "décorer" pour fabriquer une liste de listes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    T = []
    for c, i in enumerate(range(n)):
        L = []
        z = c * p
        for j in range(p):
            L.append(z + j)
        T.append(L)
    et on retrouve le code de VinsS (excepté pour le calcul du compteur).

    Citation Envoyé par Doky44 Voir le message
    Pour BufferBob : c'est nickel
    Ca le fait mais, çà utilise un "if"... donc une structure conditionnelle.


    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 10
    Par défaut
    Merci Wiztricks pour ces précisions, je débute en programmation, je sais que je suis pas au point, c'est toujours bon de prendre les conseils de personnes plus expérimentées.

    Doky.

  11. #11
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 790
    Par défaut
    Citation Envoyé par Doky44 Voir le message
    Merci Wiztricks pour ces précisions, je débute en programmation, je sais que je suis pas au point, c'est toujours bon de prendre les conseils de personnes plus expérimentées.
    Et bien ouvrez un tuto. et potassez les listes...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  12. #12
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut
    Plus simple et sans enumerate.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [list(range(i, i+p)) for i in range(1, n * p + 1, p)]

  13. #13
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 790
    Par défaut
    Citation Envoyé par bistouille Voir le message
    Plus simple et sans enumerate.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [list(range(i, i+p)) for i in range(1, n * p + 1, p)]
    très joli...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  14. #14
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 889
    Par défaut
    J'étais passé par une fonction pour simplifier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> def return_line(start, column):
    ...     return list(range(start, column+start))
    ...
    >>> [return_line(i, p) for i in range(1, n*p, p)]
    [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16], [17, 18, 19, 20]]
    qui ressemble à celle de bistouille.

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

Discussions similaires

  1. Extraction d'une liste à partir de la valeur d'une cellule
    Par lps02 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/07/2012, 21h07
  2. [XL-2010] Extraction de valeurs automatique et selon critère d'un tableau (220000 lignes)
    Par GuiBar18 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 11/10/2011, 17h35
  3. [Débutant] Recherche conditionelle et extraction de valeurs dans un tableau
    Par juliematlab dans le forum MATLAB
    Réponses: 10
    Dernier message: 10/05/2011, 17h36
  4. extraction de valeur d'un tableau
    Par joums dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/10/2009, 10h45
  5. [Tableaux] Extraction de valeur dans un tableau
    Par pirouette_07 dans le forum Langage
    Réponses: 6
    Dernier message: 21/10/2005, 18h54

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