voilà je suis de retour chers amis, est ce qu'il y a une possibilité d'ordonner une liste contenant des dates de type jj/mm/aaaa texte comme la liste ci dessous, sachant que parfois on a des dates texte sous cette forme jj-jj/mm-mm/aaaa-aaaa (exemple : 31-1/12-1/2019-2020)
Salut, Tu peux appeler la méthode sort avec le paramètre key liste.sort(key=fonction) ou sorted(liste,key=fonction) Ce sera à toi d'écrire la fonction qui analyse chaque forme et qui retourne un poids associé à chaque valeur. Le problème sera de retourner une valeur telle qu'il n'y ait pas d'ambigüité. Sinon, tu devras traiter ta liste pour séparer les intervalles: 19-20/6/2016 donnera deux entrées: 19/6/2016 et 20/6/2016 Ce sera à toi d'interpréter les formes du genre 19/5-6/2016 est-ce seulement deux dates ou l'intervalle entre ces dates?
Le Tout est souvent plus grand que la somme de ses parties.
MERCI PierrotLeFou pour l'idée, pour les date du genre 19-20/6/2016 mon programme les enregistre sous cette forme automatiquement en cas de traitement des données spectroscopique d'une nuit où l'observation commence à 20H00 du 19/6/2016 et se termine à 4H00 du matin du 20/6/2019 mais je crois l'idée est transmise et je vais essayer de le faire merci bcp
EDIT: modification suivant les indications de @PascalOrtiz
- Edité par fred1599 14 décembre 2020 à 17:21:24
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)
merci beaucoup fred1599 pour le code ça marche bien et tu m'a épargner bcp de temps pour trouver telle chose, je te remercie infiniment le problème est résolu
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)
Mais après tout, Python sachant trier naturellement l'ordre lexicographique, on peut se dispenser d'utiliser une fonction de comparaison :
dates = ['22-23/6/2016', '19-20/6/2016', '14-15/5/2016', '21/6/2016', '21/10/2016','13-14/6/2014']
print([ma_date for _, ma_date in sorted((((int(a), int(m), int(j.split('-')[-1])), date) for date in dates for j, m, a in[date.split("/")]))])
- Edité par PascalOrtiz 14 décembre 2020 à 19:48:31
Mouais, il y a pas photo, je préfère ma solution ! Elle permet de savoir sur quoi on trie, et de changer la manière de trier au cas où l'on souhaiterait un tri sur d'autres paramètres.
Et mieux vaut éviter ce genre de code qui renie les principes zen du langage.
- Edité par fred1599 14 décembre 2020 à 20:43:47
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)
Mouais, il y a pas photo, je préfère ma solution ! Elle permet de savoir sur quoi on trie, et de changer la manière de trier au cas où l'on souhaiterait un tri sur d'autres paramètres.
Et mieux vaut éviter ce genre de code qui renie les principes zen du langage.
- Edité par fred1599 il y a 18 minutes
Alors si tu veux un code zen et basée sur ton idée de fonction de comparaison, faisons tout simplement ceci :
merci pour ces beaux codes mais je rencontre tjrs un petit problème soit en utilisant le premier code ou le dernier, j'obtiens ces dates en cet ordre : 20/6/2016, 21/6/2016 et 20-21/6/2016 mais l'ordre que ces dates doit être le suivant : 20/6/2016, 20-21/6/2016 et 21/6/2016.
ci dessous l'illustration de l'ordre donné par les deux codes (premier et le dernier) sont indiquées par les trois flèches noire:
Je pense qu'il faut "normaliser" les dates comme j'ai mentionné. D'abord, mettre 2 chiffres pour le mois, 6 devient 06 Ensuite puisque tu as des intervalles, pourquoi ne pas tout transformer en intervalles? 20/6/2016 deviendrait: 2020/0606/20162016 20-21/6-7/2016 deviendrait 2021/0607/20162016 Maintenant, si tu veux que 2016 soit avant 2017 et mai avant juin, il faut tout inverser: 20162016/0606/2020 etc. Tu pourras trier facilement par caractères. Tu devras ramener la forme originale après le tri. (pas de jumeaux?)
Le Tout est souvent plus grand que la somme de ses parties.
merci pour ces beaux codes mais je rencontre tjrs un petit problème soit en utilisant le premier code ou le dernier, j'obtiens ces dates en cet ordre : 20/6/2016, 21/6/2016 et 20-21/6/2016 mais l'ordre que ces dates doit être le suivant : 20/6/2016, 20-21/6/2016 et 21/6/2016.
ci dessous l'illustration de l'ordre donné par les deux codes (premier et le dernier) sont indiquées par les trois flèches noire:
merci bcp
Bonjour,
EDIT: T'es sûr que la fonction de @PascalOrtiz ne passe pas ?
- Edité par fred1599 15 décembre 2020 à 8:51:55
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)
EDIT: T'es sûr que la fonction de @PascalOrtiz ne passe pas ?
Mon code est basé sur le tien. Mais Youssef aurait dû préciser plus tôt comment se faisait la comparaison avec des dates à jour double. Il est cependant facile d'adapter mon dernier code (ça tient en une ligne) pour obtenir le résultat souhaité car le tuple des jours est à trier dans l'ordre lexicographique et, par défaut, Python trie ainsi les tuples.
def cmp_dates(d):
j, m, a = d.split('/')
j2 = None
if '-' in j:
j2, _ = j.split('-')
return list(map(int, [a, m, j2 or j]))
Mais j'ai pas fais suffisamment de tests pour affirmer que c'est bon.
- Edité par fred1599 15 décembre 2020 à 12:42:41
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)
oui thelinekioubeur oui des données d'observation astronomiques, c'est pour juste préciser les dates d'observation extraites des fichiers fits à partir d'une entête contenant plusieurs informations sur la date d'observation les longueurs d'ondes les pas utilisés la résolution de spectrographe, le lieu etc... ce qui m'interesse c'est la date car l'ordre des dates sera significatif et facilitant de tirer rapidement des conclusions sur les contraintes cinématiques d'un type d'étoile que j'étudie et leurs évolution.
pour le code de PascalOrtiz ça marche bien mais juste pour ce que je vous ai dit en haut concernant les dates doubles où se pose le problème. je testerai le code de fred1599 et je vous informe inchallah sur les résultats donnés merci les gars pour l'aide
- Edité par youssef2_41 15 décembre 2020 à 14:21:05
Voici ce que j'ai fait pour la conversion des dates: Je suppose qu'il n'y a pas d'erreur dans le format. - #norm=lambda c: ("0"+c)[-2:] #rest=lambda c: c if c[0]!="0" else c[1] #def dupl(part): # part=part.split("-") # if len(part)==1: # part.extend(part) # if len(part[0])==4: # return "".join(part) # else: # return "".join(list(map(norm, part))) #def twin(part): # l=len(part)//2 # part=[part[:l], part[l:]] # if part[0]==part[1]: # part.pop(1) # if l==4: # return "-".join(part) # else: # return "-".join(list(map(rest, part))) #date="20-21/6/2016" #j,m,a=date.split("/") #date="/".join([dupl(a), dupl(m), dupl(j)]) #print(date) #a,m,j=date.split("/") #date="/".join([twin(j), twin(m), twin(a)]) #print(date)
Le Tout est souvent plus grand que la somme de ses parties.
Moi aussi, je vous remercie. Je me suis bien amusé avec ce problème. Ma solution n'était pas la meilleure, mais ça m'a permis de consolider des connaissances.
Le Tout est souvent plus grand que la somme de ses parties.
Je travaille sur Jupyter (Linux). Je parviens à charger le CSV de la data frame (47683 prénoms). Mon but est d'écrire un programme qui éliminera des prénoms selon des critères définis plus bas.
J'ai besoin d'exclure:
prénoms avec LI dedans prénoms qui commençent par B les prénoms avec EAN ou AN ou EN
Par quoi commencer? Est-ce que je dois écrire 3 sous fichiers (data + fonctions + le programme en tant que tel)?
Je travaille sur Jupyter (Linux). Je parviens à charger le CSV de la data frame (47683 prénoms). Mon but est d'écrire un programme qui éliminera des prénoms selon des critères définis plus bas.
J'ai besoin d'exclure:
prénoms avec LI dedans prénoms qui commençent par B les prénoms avec EAN ou AN ou EN
Par quoi commencer? Est-ce que je dois écrire 3 sous fichiers (data + fonctions + le programme en tant que tel)?
Merci pour votre aide
Salut,
Je te conseille de créer un nouveau sujet si tu veux des réponses
J'arrive un peu tard, mais juste pour une petite remarque : pour les observations astronomiques, on utilise souvent le jour julien (décimal). Ne serait-il pas judicieux de transformer d'abord la date + heure extraite du fichier FITS en jour julien ? Ensuite on trie sur le jour julien.
Ça revient au même en fait. Et que ce soit julien ou pas ça ne change pas grand chose, à part qu'il faut faire une conversion en plus. On pourrait très bien aussi faire deux objets datetime.date pour les deux bornes de l'intervalle.
Mais ton truc me fait penser à datetime.date.toordinal, qui renvoie le nombre de jours depuis le 1/1/1 (dans le calendrier grégorien).
Aussi par curiosité j'ai regardé l'implémentation du module datetime de la lib standard, et les opérateurs > et < se font avec une comparaison de tuples (que ce soit pour datetime.date ou datetime.datetime).
Ça aurait pu être une comparaison basée sur datetime.datetime.timestamp, et datetime.date.toordinal, mais j'imagine qu'une comparaison de tuples offre de meilleures performances.
- Edité par thelinekioubeur 17 décembre 2020 à 19:59:26
Ça revient au même en fait. Et que ce soit julien ou pas ça ne change pas grand chose, à part qu'il faut faire une conversion en plus.
Oui, c'est vrai que finalement le plus simple me semble de partir de la date + heure du début (ou de fin) d'observation. On pourrait même utiliser des jours décimaux (par exemple le 17,875 pour le 17 à 21h). Ce qui a compliqué tout, c'est de construire des dates avec deux jours (comme 17-18).
tri d'une liste
× 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.
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
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
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.
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
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
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.