Trie avancée dans une liste imbriquée sans sort() [Fermé]

Signaler
-
 Whisper40 -
Bonjour, je suis nouveau et j'aurais besoin d'aide sur une fin de projet, j'ai actuellement une fonction qui me trie une liste suivant l'age inverse des personnes grace a la fonction sorted depuis une liste imbriquée (1 liste dans l'autre), toutefois je voudrais le faire sans utiliser des fonctions de type sort ou sorted.

C'est a dire qu'en clair je voudrais le faire a la main, sans que "sort" n'apparaisse :)



La partie concernée est celle-ci :

from datetime import datetime
lst = [['WILSON', 'MIKE', 'H', '26/06/1950'], ['EMERIC', 'JAMES', 'H', '27/06/1960'], ['MOPAL', 'ARTHUR', 'H', '27/06/1966']]
def agepersonne():
print(sorted(lst, key=lambda item: datetime.strptime(item[3], '%d/%m/%Y'), reverse=True))
agepersonne()



Au final le résultat est celui-ci :



[['MOPAL', 'ARTHUR', 'H', '27/06/1966'],
['EMERIC', 'JAMES', 'H', '27/06/1960'],
['WILSON', 'MIKE', 'H', '26/06/1950']]

Ce qui est tout a fait correct par rapport a ce que je souhaite, sauf que je n'arrive pas a le faire " a la main... " .
Si une personne peut m'aider merci..
    

1 réponse

Bonsoir,

Je suppose que si tu souhaites créer ta propre fonction de tri, c'est dans un but pédagogique, de ce fait te fournir du code tout fait ne servirait donc à rien.
Maintenant des algorithmes de tri il en existe beaucoup.
https://fr.wikipedia.org/wiki/Algorithme_de_tri

Le plus commun et sans doute le plus simple à mettre en oeuvre est le tri par insertion.
https://fr.wikipedia.org/wiki/Tri_par_insertion

Tu sais comment trier tes dates, tu n'auras donc juste besoin pour créer ton implémentation de tri que des méthodes insert et append de list.
//Modif du code avec suppression des / entre les chiffres //
Je comprends le principe du programme qui a pour but de placer "une date" en fonction des autres, pour cela il analyse la liste afin de placer "une date" au bon endroit afin de garder la liste triée a chaque ajout.





L = [['WILSON', 'MIKE', 'H', '19700626'], ['EMERIC', 'JAMES', 'H', '19670626'], ['MOPAL', 'ARTHUR', 'H', '19660627']]
def trie(L):
for i in range(1, len(L)):
temporaire=L[i]
j = i - 1
while j >=0 and L[j] > temporaire:
L[j+1] = L[j]
j -= 1
L[j+1] = temporaire
return L
print(trie(L))



Le résultat :


[['EMERIC', 'JAMES', 'H', '19670626'], ['MOPAL', 'ARTHUR', 'H', '19660627'], ['WILSON', 'MIKE', 'H', '19700626']]



Donc il a trié les personnes suivant leur nom dans un ordre alphabétique, j'ai essayé diverses méthodes pour enlever les [[',']] et faire un retour a la ligne après chaque personne mais sans succés..
J'aurais aussi aimé enlever les informations après le prénom, afin d'avoir un résultat du type :



EMERIC JAMES
MOPAL ARTHUR
WILSON MIKE




Si vous savez comment faire je suis preneur..

Et bien sur j'ai encore une fois essayer de comprendre comment gérer les dates mais je suis désolé ce n'est pas compréhensible pour ma part..
Je n'ai pas d'idée comment m'en sortir avec une variable qui contient YYYYMMJJ..
Merci