2011-06-18 2 views
0

J'ai des dates dans un script Python avec lequel je dois travailler et qui sont dans une liste. Je dois garder le format qui existe déjà. Le format est AAAA-MM-JJ. Ils sont affichés sous la forme ['2010-05-12', '2011-04-15', 'Date', '2010-04-20', '2010-11-05'] où l'ordre des dates apparaît être aléatoire et ils sont transformés en listes avec des longueurs apparemment insignifiantes. La longueur de ces données peut devenir très grande. J'ai besoin de savoir comment trier ces dates dans un ordre chronologique et omettre les entrées apparemment placées aléatoirement de «Date» de cet ordre. Ensuite, je dois être en mesure d'effectuer des opérations mathématiques telles que le déplacement vers le haut et le bas de la liste. Par exemple, si j'ai cinq dates dans l'ordre, je dois être en mesure de prendre une date et être en mesure de trouver une date x espaces avant ou après cette date dans l'ordre. Je suis très nouveau sur Python, les explications et les implémentations les plus simples sont donc préférées. Faites-moi savoir si des éclaircissements sont nécessaires. Merci.Comment effectuer des opérations mathématiques sur des dates et les trier en Python?

+0

Pourquoi avez-vous besoin de les garder dans ce format? Convertissez-les en objets datetime.date et formatez-les pour l'affichage. – geoffspear

+0

Je n'ai pas besoin de conserver ce format si je peux le reconvertir. – BlackBoxTrader

+2

Si votre format est toujours "AAAA-MM-JJ" (c'est-à-dire non influencé par les [paramètres régionaux] actuels (http://en.wikipedia.org/wiki/Locale)), alors l'ordre [lexicographique] (http://en.wikipedia.org/wiki/Lexicographical_order) est le même que l'ordre chronologique. Juste les trier comme des chaînes! –

Répondre

4

Vous posez plusieurs questions en même temps, alors je vais y répondre dans l'ordre.

Pour filtrer les "Date" entrées, utilisez le filter function comme ceci:

dates = ['2011-06-18', 'Date', '2010-01-13', '1997-12-01', '2007-08-11'] 
dates_filtered = filter(lambda d: d != 'Date', dates) 

Ou peut-être comme celui-ci, en utilisant Python's list comprehensions, si vous le trouvez plus facile à comprendre:

dates_filtered = [d for d in dates if d != 'Date'] 

Vous voudrez peut-être pour convertir les types de données des éléments de date dans votre liste au date class pour avoir accès à certaines méthodes liées à la date comme ceci:

from datetime import datetime 
date_objects = [datetime.strptime(x,'%Y-%m-%d').date() for x in dates_filtered] 

Et pour trier les dates que vous utilisez simplement le sort method

date_objects.sort() 

La syntaxe en Python pour accéder à des éléments et des gammes d'articles dans les listes (ou tout autre type « séquence ») est assez puissant. Vous pouvez read more about it here. Par exemple, si vous voulez accéder aux deux dernières dates dans votre liste, vous pouvez faire quelque chose comme ceci:

print(date_objects[-2:] 

Si vous mettez tous ensemble, vous obtiendrez quelque chose comme ceci:

from datetime import datetime 
dates = ['2011-06-18', 'Date', '2010-01-13', '1997-12-01', '2007-08-11'] 
my_dates = [datetime.strptime(d, '%Y-%m-%d').date() 
      for d in dates 
      if d != 'Date'] 
my_dates.sort() 
+0

Cela ressemble à ce que je veux faire. Alors, comment vais-je faire cela? – BlackBoxTrader

+0

J'ai ajouté quelques exemples et liens vers la documentation Python. (Ce qui est génial, et vous devriez vraiment apprendre à le contourner si vous allez faire une programmation Python sérieuse). Les exemples ci-dessus ne sont probablement pas exactement comment j'écrirais le code, je voulais juste vous montrer comment démarrer de manière simple. Codage heureux! –

+0

En note, les exemples ci-dessus fonctionneront réellement si vous les coupez et les collez dans un fichier texte. Ils sont Python 2. [quelque chose] ainsi que Python 3 compatible. –

Questions connexes