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 :

Exo liste python


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2022
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2022
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Exo liste python
    Bonjour

    Quel le code python pour:

    Définir la fonction min(k,L) qui prend un entier k et une liste L et qui renvoie la liste des index des k premiers minimum de la liste L. La fonction pourra parcourir k fois la liste L. Il est possible d’utiliser l’objet inf du module math qui permet de gérer l’infini.

    Par exemple l’appel min(3, [5,9,10,2,6,8]) renvoie la liste [3,0,4].


    Merci

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 351
    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 351
    Points : 36 875
    Points
    36 875
    Par défaut
    Salut,

    Qu'avez vous essayé de faire et qu'est ce qui vous bloque?

    Il y a plein d'algorithmes et de codes pour faire çà.
    Ils n'ont aucun intérêt sauf côté le boulot pour les découvrir et les coder.

    - W

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2022
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2022
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Exo liste python
    Salut, j'ai ça mais c'est pas bon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def min(k,l):
        res = []
        for i in range(k):
            index_min = 0
        for j in range(1,len(l)):
            if l[j] < l[index_min]:
                index_min = j
            l[index_min] =np.inf
            res.append(index_min)
        return res

  4. #4
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Points : 718
    Points
    718
    Par défaut
    Citation Envoyé par luvod Voir le message
    Salut, j'ai ça mais c'est pas bon:

    def min(k,l):
    res = []
    for i in range(k):
    index_min = 0
    for j in range(1,len(l)):
    if l[j] < l[index_min]:
    index_min = j
    l[index_min] =np.inf
    res.append(index_min)
    return res
    Heu, il faut utiliser les balises de code (sinon personne ne lira ni ne pourra recopier votre code) et poster également l'erreur obtenue.
    Est-ce que c'est cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    def min(k,l):
        res = []
        for i in range(k):
            index_min = 0
        for j in range(1,len(l)):
            if l[j] < l[index_min]:
                index_min = j
            l[index_min] =np.inf
            res.append(index_min)
        return res
     
    if __name__ == "__main__":
        min(8,6)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Traceback (most recent call last):
      File "fred.py", line 13, in <module>
        min(8,6)
      File "fred.py", line 5, in min
        for j in range(1,len(l)):
    TypeError: object of type 'int' has no len()

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2022
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2022
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Exo liste python
    Pardon pour les balises. Oui mais il n'y a pas de messages d'erreurs. Ce code ne donne pas le résultat attendu par exemple pour min(3, [5,9,10,2,6,8]) j'aimerais comme retour la liste [3,0,4]

    Merci

  6. #6
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Points : 718
    Points
    718
    Par défaut
    Donc le code est
    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
    import numpy as np
     
    def min(k,l):
        res = []
        for i in range(k):
            index_min = 0
        for j in range(1,len(l)):
            if l[j] < l[index_min]:
                index_min = j
            l[index_min] =np.inf
            res.append(index_min)
        return res
     
    if __name__ == "__main__":
        print(min(3, [5,9,10,2,6,8]))
    le résultat est
    au lieu de
    C'est ça ?

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2022
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2022
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Exo liste python
    Oui tout à fait

  8. #8
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Points : 718
    Points
    718
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        for i in range(k):
            index_min = 0
    Bon, alors, là on met 3 fois la variable index_min à 0.
    Vous n'avez pas confiance la première fois ?

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2022
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2022
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Exo liste python
    Oui je vois bien que ma boucle sur i ne va pas

  10. #10
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Points : 718
    Points
    718
    Par défaut
    Une version sans numpy

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> ma_liste = [89,58,25,24, 1,0]
    >>> ma_liste.sort()
    >>> ma_liste
    [0, 1, 24, 25, 58, 89]
    >>> ma_liste[0:3]
    [0, 1, 24]
    >>>

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2022
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2022
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Exo liste python
    Ce n'est pas l'exercice initial que je remets:

    Définir la fonction min(k,L) qui prend un entier k et une liste L et qui renvoie la liste des index des k premiers minimum de la liste L. La fonction pourra parcourir k fois la liste L. Il est possible d’utiliser l’objet inf du module math qui permet de gérer l’infini.

    Par exemple l’appel min(3, [5,9,10,2,6,8]) renvoie la liste [3,0,4].

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 351
    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 351
    Points : 36 875
    Points
    36 875
    Par défaut
    Citation Envoyé par luvod Voir le message
    Ce code ne donne pas le résultat attendu par exemple pour min(3, [5,9,10,2,6,8]) j'aimerais comme retour la liste [3,0,4]
    Avant de poster du code, il faudrait décrire l'algorithme/méthode retenue pour obtenir le résultat...

    Citation Envoyé par luvod Voir le message
    Ce n'est pas l'exercice initial que je remets:

    Définir la fonction min(k,L) qui prend un entier k et une liste L et qui renvoie la liste des index des k premiers minimum de la liste L. La fonction pourra parcourir k fois la liste L. Il est possible d’utiliser l’objet inf du module math qui permet de gérer l’infini.

    Par exemple l’appel min(3, [5,9,10,2,6,8]) renvoie la liste [3,0,4].
    Comme c'est identique, c'est bien de le dire mais... ça ne dit rien de plus sur ce que vous attendez (de nous).


    - W

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2022
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2022
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Exo liste python
    Désolé mais pouvez-vous corriger mon code pour que ça marche. Merci.

  14. #14
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 351
    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 351
    Points : 36 875
    Points
    36 875
    Par défaut
    Citation Envoyé par luvod Voir le message
    Désolé mais pouvez-vous corriger mon code pour que ça marche. Merci.
    Si vous ne commencez pas par expliquer ce que vous avez cherché à faire... impossible de corriger quoi que ce soit.
    Sinon, moi j'écrirai çà comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> L = [5,9,10,2,6,8]
    >>> sorted(range(len(L)), key=lambda i: L[i])[:3]
    [3, 0, 4]
    - W

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2022
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2022
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Exo liste python
    Du coup je reprends:

    J'ai tenté de créer une fonction min(k,L) qui qui prend un entier k et une liste L et qui renvoie la liste des index des k premiers minimum de la liste L. La fonction pourra parcourir k fois la liste L. Par exemple si L=[5,9,10,2,6,8], min(3,L) doit retourner [3,0,4] ou encore min(5,L) retourne [3,0,4,5,1]
    J'ai tenté le code suivant qui n'a pas de message d'erreurs mais qui ne donne pas le résultat souhaité.
    J'aurais aimé comprendre mes erreurs dans ce code et le corriger pour obtenir le résultat attendu. merci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def min(k,l):
        res = []
        for i in range(k):
            index_min = 0
        for j in range(1,len(l)):
            if l[j] < l[index_min]:
                index_min = j
            l[index_min] =np.inf
            res.append(index_min)
        return res

  16. #16
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 351
    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 351
    Points : 36 875
    Points
    36 875
    Par défaut
    Citation Envoyé par luvod Voir le message
    J'ai tenté le code suivant qui n'a pas de message d'erreurs mais qui ne donne pas le résultat souhaité.
    Certes mais çà ne dit rien sur le procédé retenu pour trouver la solution.

    Mon code récupère les 3 premiers items de la listes des indices triées en fonction des valeurs.
    On peut remonter à l'idée de départ: trier la liste mais récupérer la valeur des index et en prendre les 3 premiers.

    Quand on code, on a une idée, un procédé, un algo dans la tête qu'on traduit en code et quand on lit le code on doit retrouver l'idée.

    - W

  17. #17
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Tech Lead
    Inscrit en
    Avril 2016
    Messages
    1 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Tech Lead

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 486
    Points : 6 169
    Points
    6 169
    Par défaut
    Citation Envoyé par luvod Voir le message
    Définir la fonction min(k,L) qui prend un entier k et une liste L et qui renvoie la liste des index des k premiers minimum de la liste L. La fonction pourra parcourir k fois la liste L. Il est possible d’utiliser l’objet inf du module math qui permet de gérer l’infini.

    Par exemple l’appel min(3, [5,9,10,2,6,8]) renvoie la liste [3,0,4].
    Bonjour,

    Je ne vais pas donner entièrement la solution, mais voici un indice :
    L'auteur de l'énoncé s'attend vraisemblablement à ce que le code min(3, [5,9,10,2,6,8]) fasse ceci :

    • res = []
    • Parcourir la liste pour trouver le minimum. Il est à l'indice 3.
    • res.append(3)
    • L[3] = math.inf
    • Parcourir la liste pour trouver le minimum. Il est à l'indice 0.
    • res.append(0)
    • L[0] = math.inf
    • Parcourir la liste pour trouver le minimum. Il est à l'indice 4.
    • res.append(4)
    • Éventuellement L[4] = math.inf. Cela ne sert à rien, mais ce n'est pas grave si le code fait cela aussi, comme les itérations précédentes.
    • return res

    À présent, il y a deux choses à faire :

    • Remplacer le texte "Parcourir la liste pour trouver le minimum." par le vrai code.
    • Généraliser la procédure ci-dessus avec k un entier naturel quelconque et pas seulement 3.

    Il faut essayer de penser ces deux choses de manière séparée. Il faut décomposer le problème en sous-problèmes.

  18. #18
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 055
    Points : 9 476
    Points
    9 476
    Par défaut
    Hello,
    une solution interdite pour le fun car elle utilise une bibliothèque standard python ( heapq) :
    >>>import heapq
    >>>test_list = [5, 9, 10, 2, 6, 8]
    >>>print(heapq.nsmallest(3, range(len(test_list)), key=test_list.__getitem__)) # liste indices
    >>>[3, 0, 4]
    Ami calmant, J.P

  19. #19
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Tech Lead
    Inscrit en
    Avril 2016
    Messages
    1 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Tech Lead

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 486
    Points : 6 169
    Points
    6 169
    Par défaut
    Citation Envoyé par luvod Voir le message
    J'ai tenté le code suivant qui n'a pas de message d'erreurs mais qui ne donne pas le résultat souhaité.
    J'aurais aimé comprendre mes erreurs dans ce code et le corriger pour obtenir le résultat attendu. merci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def min(k,l):
        res = []
        for i in range(k):
            index_min = 0
        for j in range(1,len(l)):
            if l[j] < l[index_min]:
                index_min = j
            l[index_min] =np.inf
            res.append(index_min)
        return res
    Je donne un deuxième indice. En fait, le code que tu as publié ressemble à un copié-collé d'un code juste (à part qu'il faudrait remplacer np.inf par math.inf pour mieux coller à l'énoncé), mais dont l'indentation a été changée. Sur ce forum, nous sommes capables de dire de quelle manière il faudrait changer l'indentation pour que ce code devienne juste, mais cela n'aurait aucun intérêt. Le but de l'exercice est de tester un savoir-faire en algorithmie. Le code doit être une traduction d'un algorithme pensé et non pas d'un copié-collé raté.

  20. #20
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2022
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2022
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Exo liste python
    Oui je suis trop mauvais pour ne pas commencer par tester des codes existants et comprendre.
    Voici le code corrigé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def k_min(k,l):
        res = []
        for i in range(k):
            index_min = 0
            for j in range(1,len(l)):
                 if l[j] < l[index_min]:
                         index_min = j
            res.append(index_min)
            l[index_min] =math.inf
        return res
    Je ne comprends ce que fait math.inf
    Merci

Discussions similaires

  1. Recherche des ptis exos pour python
    Par newsuser dans le forum Général Python
    Réponses: 4
    Dernier message: 27/11/2011, 23h06
  2. Manipulation list python
    Par Aioros046 dans le forum Général Python
    Réponses: 7
    Dernier message: 10/03/2010, 15h40
  3. Tri Liste Python
    Par Isabella83 dans le forum Général Python
    Réponses: 1
    Dernier message: 09/01/2010, 17h13
  4. vecteur C vers liste Python
    Par jyjeanphi dans le forum Interfaçage autre langage
    Réponses: 4
    Dernier message: 30/03/2009, 05h01
  5. Que choisir pour une application de "gestion d'une todo liste" ? Python ou Java ?
    Par Yoshidu62 dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 10/08/2007, 09h03

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