j'ai besoin de votre aide pour comprendre comment trier une liste sur python dans l'ordre croissant
Utiliser des fonctions Python prédéfinies pour trier une liste ? ou alors écrire toi-même une fonction Python qui réalise un tri dans l'ordre croissant ?
Pour la première question, PB68 a donné un lien et en voici un autre, grosso modo, tu utilises la fonction sorted.
Pour la 2e, il existe plusieurs algorithmes que tu peux coder toi-même en Python parmi lesquels le tri par sélection, sans doute le plus simple.
Je n'avais jamais fait de tri par sélection en Python. En voici un exemple simple: - def selection(L): lg = len(L) for i in range(lg-1): m = i for j in range(i+1, lg): if L[m] > L[j]: m = j L[m], L[i] = L[i], L[m] # L =[3, 5, 2, 1, 6, 3] selection(L) print(L)
Le Tout est souvent plus grand que la somme de ses parties.
def sort_selection(arr):
for i in range(len(arr) - 1):
min_index = min(range(i, len(arr)), key=arr.__getitem__)
arr[i], arr[min_index] = arr[min_index], arr[i]
return arr
L = [3, 5, 2, 1, 6, 3]
sort_selection(L)
print(L)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Je n'avais jamais fait de tri par sélection en Python. En voici un exemple simple: - def selection(L): lg = len(L) for i in range(lg-1): m = i for j in range(i+1, lg): if L[m] > L[j]: m = j L[m], L[i] = L[i], L[m] # L =[3, 5, 2, 1, 6, 3] selection(L) print(L)
Exactement le code que j'avais dans mes archives (sauf les noms de variables). Sur une liste de 10000 entiers, met 2.59 s.
fred1599 a écrit:
Voici une solution pour le tri par sélection,
def sort_selection(arr):
for i in range(len(arr) - 1):
min_index = min(range(i, len(arr)), key=arr.__getitem__)
arr[i], arr[min_index] = arr[min_index], arr[i]
return arr
L = [3, 5, 2, 1, 6, 3]
sort_selection(L)
print(L)
Bien vu, plus efficace que le précédent : sur une liste de 10000 entiers, met 2.04 s. Remarque : ce tri se veut l'analogue de la méthode sort et donc devrait renvoyer None (ça n'a pas d'intérêt de renvoyer L).
Autres possibilités plus rapides (tris pas en place mais la liste donnée en argument est préservée, ce qui est l'essentiel) :
def oneline(L):
L[:]=[(min(L), L.remove(min(L)))[0] for _ in range(len(L)-1)]+[L[0]]
Temps : 1.46 s.
def steps(L):
M=[]
for _ in range(len(L)):
mini=min(L)
M.append(mini)
L.remove(mini)
L[:]=M
Comme quoi le traitement des indices coûte cher. Le remove se fait plus rapidement que j'aurais pensé. Tout se fait de plus en plus vite car la liste L diminue de grandeur.
Le Tout est souvent plus grand que la somme de ses parties.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
PB68
Découverte Python Doc Tkinter Les chaînes de caractères
Le Tout est souvent plus grand que la somme de ses parties.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Découverte Python Doc Tkinter Les chaînes de caractères
Le Tout est souvent plus grand que la somme de ses parties.
Découverte Python Doc Tkinter Les chaînes de caractères