Inscription / Connexion Nouveau Sujet
Niveau première
Partager :

algorithmique - les listes

Posté par
Franca26
25-10-22 à 14:40

Bonjour,
je me permets de solliciter de l'aide pour un devoir avec Python. Je n'arrive pas à comprendre comment je dois faire.

énoncé :

Le principe du tri que veut réaliser le programmeur est le suivant. A chaque passage, tant que la liste L n'est pas vide, on ôte la valeur minimale trouvée dans la liste L et on la stocke à la suite d'une autre liste L1, vide au départ. Ainsi, L contient la liste L d'origine, triée par ordre croissant. Recopier et compléter la fonction ci-dessous.

def tri_selection(L):
         L1=[]
         for i in range(len(L)):
                 m=...
                 L.remove(...)
                 L1.append(...)
           L=L1
           return(L1)


J'ai essayé de compléter cet algorithme mais je n'ai pas réussi à trouver le minimum.
Voilà ce que j'ai fait :

def tri_selection(L):
         L1=[]
         for i in range(len(L)):
                 m=L1.sort(L)      
parce que je sais que list.sort () veut dire par ordre croissant en python
                 L.remove(m)        
parce que remove veut dire supprimer dans python et dans l'énoncé, il est dit qu'il faut supprimer la valeur minimale
                 L1.append(L)
parce qu'il faut ajouter à L1 la liste L.
           L=L1
           return(L1)

Mais quand j'essaie avec des valeurs, cela ne fonctionne pas.

Posté par
mathafou Moderateur
re : algorithmique - les listes 25-10-22 à 16:17

Bonjour,

Bonjour,

énoncé faux
"Ainsi, L contient la liste L d'origine, triée par ordre croissant"
non. le résultat est dans L1

et pour l'algo :
on supprime de la liste L un élément (m) de cette liste L et on ajoute ce seul élément m à la liste L1.

et L.sort() ne donne pas le résultat que tu penses
(relire la doc)
pour trouver le plus petit élément d'une liste c'est min(L)
pas un truc pour trier la liste.
ce serait d'ailleurs une arnaque absurde d'utiliser sort() !!
vu que avec la seule ligne L.sort() c'est déja tout fini :

L=[5,1,3,7,2,4,9,6,8]

L.sort()
print(L)

*** Console de processus distant Réinitialisée *** 
[1, 2, 3, 4, 5, 6, 7, 8, 9]

et aucun besoin de boucle pour ça !
et ce n'est pas ce qu'on demande.

Posté par
Franca26
re : algorithmique - les listes 25-10-22 à 18:54

Merci beaucoup pour votre réponse,

effectivement dans l'énoncé c'est bien L1 et non L (mes excuses pour cette erreur).

Si je reformule : L1 est la liste déjà triée (comme mis dans l'énoncé) donc pas besoin d'utiliser sort comme je l'avais fait?

Du coup, si j'ai bien compris m=min(L) puis L.remove(m) et ensuite L1.append(m)?
Mais Python donne comme résultat "..." ?  

Il semblerait qu'il y a encore quelque chose qui m'échappe? Cela semble certainement évident mais c'est la première fois que j'utilise Python.

Posté par
mathafou Moderateur
re : algorithmique - les listes 25-10-22 à 19:58

en essayant sur un des nombreux sites de Python en ligne

def tri_selection(L):
    L1=[]
    for i in range(len(L)):
        m=min(L)
        L.remove(m)
        L1.append(m)
    return(L1)
    
print(tri_selection([4,8,5,2,9,3,1,7,6]))


si on lance l'exécution, il affiche dans la console :

[1, 2, 3, 4, 5, 6, 7, 8, 9] (c'est bien trié)
** Process exited - Return Code: 0 **
(le code de retour 0 d'un programme veut dire que c'est tout bon)

Posté par
Franca26
re : algorithmique - les listes 25-10-22 à 21:01

D'accord,
Merci encore, vous m'avez bien aidé.
Je suis contente d'avoir pu mieux comprendre mon exercice et cela grâce à vous. Merci aussi pour la rapidité à laquelle vous m'avez répondu.



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 1674 fiches de maths

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !